[cfe-commits] r77556 - in /cfe/trunk: lib/AST/RecordLayoutBuilder.cpp lib/AST/RecordLayoutBuilder.h lib/CodeGen/CodeGenTypes.cpp test/CodeGenCXX/virt.cpp

Douglas Gregor dgregor at apple.com
Thu Jul 30 08:28:35 PDT 2009

On Jul 29, 2009, at 9:07 PM, Anders Carlsson wrote:

>>> // If this is a C++ class, lay out the nonvirtual bases.
>>> -  if (Ctx.getLangOptions().CPlusPlus)
>>> -    LayoutNonVirtualBases(cast<CXXRecordDecl>(D));
>>> +  if (Ctx.getLangOptions().CPlusPlus) {
>>> +    const CXXRecordDecl *RD = cast<CXXRecordDecl>(D);
>>> +    LayoutVtable(RD);
>>> +    LayoutNonVirtualBases(RD);
>> Why check for c++? Do we get CXXRecordDecl AST in other languages I
>> wonder?
> You don't. You can however get RecordDecls back even in CPlusPlus due
> to Objective-C.

Oops. There's a lot of Sema code that assumes that if we're in C++,  
all RecordDecls are really CXXRecordDecls.

> I suggest that we always use dyn_cast<CXXRecordDecl>
> (D) instead of checking CPlusPlus.

At some point, I'm planning to kill off CXXRecordDecl entirely, so  
that we have one kind of RecordDecl that has all of the C and C++  
behavior in it. Of course, it will differentiate between C and C++  
records internally, to save space, but that difference won't be  
visible outside. This is one of those TODO items that keeps getting  
pushed down.

	- Doug

More information about the cfe-commits mailing list