On May 25, 2010, at 1:34 PM, Douglas Gregor wrote:


On May 25, 2010, at 1:33 PM, John McCall wrote:


On May 25, 2010, at 12:56 PM, Douglas Gregor wrote:


On May 25, 2010, at 12:54 PM, Charles Davis wrote:

On 5/25/10 11:18 AM, John McCall wrote:
On May 24, 2010, at 10:43 PM, Charles Davis wrote:
This is the first patch in my GSoC series, in which I will factor out C++ ABI support in IRgen so that we can support other C++ ABIs. This patch is very simple. It just adds a class hierarchy similar to the one for Objective-C runtimes, and a basic implementation for the current GNU C++ ABI. All it supports is name mangling. CodeGenFunction has been
redirected to use this new interface instead of holding the
MangleContext itself (which is very specific to the GNU ABI right now).

For better or worse, people call this the Itanium ABI; gcc's implementation hews faithfully to that standard, and we should use that name. The term "GNU ABI" is likely
to make people think of the old (pre-v3.2) gcc ABI.
Noted.

Also, I think we can live without the "CG" prefix on "CGCXXABI".
Done. (The header name still has the CG prefix, though.)

I'd prefer to avoid lazy initialization. We should never be calling into the CXXABI for non-C++ code, so you should be able to create it during initialization if CPlusPlus is set and then assert on its existence in getCXXABI().
I don't know about that.

When I added the assert, clang started asserting whenever it was
generating IR for non-C++ (that's C and ObjC) code. I think clang right now just assumes that the MangleContext is always available and will "Do
the Right Thing" based on whether or not Features.CPlusPlus is set.

I agree, C and ObjC IRgen shouldn't be calling into any C++- specific
stuff. But I'll fix that later.


We use the "C++" mangler for some things in C/Objective-C as well, including blocks (a recent change), overloaded functions in C, and (IIRC) some Objective-C method names.

Ah, right, I'd forgotten about that. So yeah, we should continue to lazily create the C++ ABI.

I suppose it's reasonable to always defer these manglings to the target C++ ABI. Maybe we can abstract out some common functionality so that new ABIs don't need so many redundant manglings.

Yes, I think that makes sense. Separating ObjC from C++ might be reasonable, for example.

ObjC does not do any C++ style mangling (ObjC's type encoding is in ASTContext.cpp). Blocks are part of all languages. There might be some ObjC specific code
added inadvertently  though which should be moved out.

- Fariborz



        - Doug

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to