On Jun 12, 2012, at 2:47 PM, Nico Weber wrote: > On Thu, Oct 6, 2011 at 7:39 PM, John McCall <[email protected]> wrote: >> Author: rjmccall >> Date: Thu Oct 6 21:39:22 2011 >> New Revision: 141350 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=141350&view=rev >> Log: >> Record layout requires not just a definition, but a complete >> definition. Assert this. Change IR generation to not try to >> aggressively emit the IR translation of a record during its >> own definition. Fixes PR10912. >> >> >> Modified: >> cfe/trunk/lib/AST/RecordLayoutBuilder.cpp >> cfe/trunk/lib/CodeGen/CodeGenTypes.cpp >> cfe/trunk/test/CodeGenCXX/class-layout.cpp >> >> Modified: cfe/trunk/lib/AST/RecordLayoutBuilder.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=141350&r1=141349&r2=141350&view=diff >> ============================================================================== >> --- cfe/trunk/lib/AST/RecordLayoutBuilder.cpp (original) >> +++ cfe/trunk/lib/AST/RecordLayoutBuilder.cpp Thu Oct 6 21:39:22 2011 >> @@ -2007,8 +2007,13 @@ >> /// position information. >> const ASTRecordLayout & >> ASTContext::getASTRecordLayout(const RecordDecl *D) const { >> + // These asserts test different things. A record has a definition >> + // as soon as we begin to parse the definition. That definition is >> + // not a complete definition (which is what isDefinition() tests) >> + // until we *finish* parsing the definition. >> D = D->getDefinition(); >> assert(D && "Cannot get layout of forward declarations!"); >> + assert(D->isDefinition() && "Cannot layout type before complete!"); > > ^ this fails for some invalid inputs, see PR13096
Then those inputs should not be calling getASTRecordLayout; they should bail out beforehand. John. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
