[LLVMbugs] [Bug 7684] New: "Cannot get layout of forward declarations" on invalid code

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Jul 21 07:01:03 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=7684

           Summary: "Cannot get layout of forward declarations" on invalid
                    code
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: chris at bubblescope.net
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


Created an attachment (id=5250)
 --> (http://llvm.org/bugs/attachment.cgi?id=5250)
Forward example

The attached code fails with the following backtrace. This code was reduced
from trying to use boost::mpi without mpi installed.

/Users/caj/Dropbox/forward.cc:3:8: error: field has incomplete type 'status'
{  _T1 first; };
       ^
/Users/caj/Dropbox/forward.cc:11:13: note: in instantiation of template class
      'pair<status>' requested here
  int data[ sizeof(T) ];
            ^
/Users/caj/Dropbox/forward.cc:16:42: note: in instantiation of template class
      'make_reference_content<pair<status> >' requested here
{  make_reference_content<pair<status> > result; };
                                         ^
/Users/caj/Dropbox/forward.cc:15:8: note: definition of 'status' is not
complete
      until the closing '}'
struct status
       ^
Assertion failed: (D && "Cannot get layout of forward declarations!"), function
getASTRecordLayout, file RecordLayoutBuilder.cpp, line 1461.
0  clang             0x00000001010fbd78 PrintStackTrace(void*) + 38
1  clang             0x00000001010fc286 SignalHandler(int) + 254
2  libSystem.B.dylib 0x00007fff8398c35a _sigtramp + 26
3  libSystem.B.dylib 0x00007fff839310aa tiny_malloc_from_free_list + 1196
4  libSystem.B.dylib 0x00007fff83a079b4 __pthread_markcancel + 0
5  clang             0x0000000100657ebd
clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) + 97
6  clang             0x0000000100657d83 (anonymous
namespace)::EmptySubobjectMap::ComputeEmptySubobjectSizes() + 429
7  clang             0x0000000100657e5a (anonymous
namespace)::EmptySubobjectMap::EmptySubobjectMap(clang::ASTContext&,
clang::CXXRecordDecl const*) + 94
8  clang             0x0000000100657f24
clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) + 200
9  clang             0x0000000100657d83 (anonymous
namespace)::EmptySubobjectMap::ComputeEmptySubobjectSizes() + 429
10 clang             0x0000000100657e5a (anonymous
namespace)::EmptySubobjectMap::EmptySubobjectMap(clang::ASTContext&,
clang::CXXRecordDecl const*) + 94
11 clang             0x0000000100657f24
clang::ASTContext::getASTRecordLayout(clang::RecordDecl const*) + 200
12 clang             0x00000001005b0a1f
clang::ASTContext::getTypeInfo(clang::Type const*) + 2563
13 clang             0x00000001005b0de8
clang::ASTContext::getTypeInfo(clang::Type const*) + 3532
14 clang             0x000000010062bde9
clang::ASTContext::getTypeInfo(clang::QualType) + 37
15 clang             0x00000001005cc949
clang::ASTContext::getTypeSize(clang::QualType) + 29
16 clang             0x00000001005b43b8
clang::ASTContext::getTypeSizeInChars(clang::QualType) + 30
17 clang             0x000000010063cf48 (anonymous
namespace)::IntExprEvaluator::VisitSizeOfAlignOfExpr(clang::SizeOfAlignOfExpr
const*) + 374
18 clang             0x0000000100641f8e clang::StmtVisitor<(anonymous
namespace)::IntExprEvaluator, bool>::Visit(clang::Stmt*) + 4152
19 clang             0x0000000100644b40
clang::Expr::Evaluate(clang::Expr::EvalResult&, clang::ASTContext&) const + 258
20 clang             0x00000001006461af
clang::Expr::isIntegerConstantExpr(llvm::APSInt&, clang::ASTContext&,
clang::SourceLocation*, bool) const + 151
21 clang             0x00000001003cf361
clang::Sema::CheckTemplateArgument(clang::NonTypeTemplateParmDecl*,
clang::QualType, clang::Expr*&, clang::TemplateArgument&,
clang::Sema::CheckTemplateArgumentKind) + 673
22 clang             0x00000001003d2377
clang::Sema::CheckTemplateArgument(clang::NamedDecl*,
clang::TemplateArgumentLoc const&, clang::TemplateDecl*, clang::SourceLocation,
clang::SourceLocation, clang::TemplateArgumentListBuilder&,
clang::Sema::CheckTemplateArgumentKind) + 875
23 clang             0x00000001003d2eb9
clang::Sema::CheckTemplateArgumentList(clang::TemplateDecl*,
clang::SourceLocation, clang::TemplateArgumentListInfo const&, bool,
clang::TemplateArgumentListBuilder&) + 1133
24 clang             0x00000001003d3cc8
clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation,
clang::TemplateArgumentListInfo const&) + 206
25 clang             0x00000001003f6cc2 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::RebuildTemplateSpecializationType(clang::TemplateName,
clang::SourceLocation, clang::TemplateArgumentListInfo const&) + 46
26 clang             0x0000000100411476 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&,
clang::TemplateSpecializationTypeLoc, clang::QualType) + 522
27 clang             0x0000000100419003 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc, clang::QualType) + 1789
28 clang             0x00000001003fd0e9 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*,
clang::QualType) + 229
29 clang             0x00000001003fd580 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::QualType,
clang::QualType) + 178
30 clang             0x00000001003fea92 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformNestedNameSpecifier(clang::NestedNameSpecifier*,
clang::SourceRange, clang::QualType, clang::NamedDecl*) + 934
31 clang             0x00000001003fec35 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDependentNameType(clang::TypeLocBuilder&,
clang::DependentNameTypeLoc, clang::QualType) + 137
32 clang             0x0000000100419073 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&,
clang::TypeLoc, clang::QualType) + 1901
33 clang             0x00000001003fd0e9 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*,
clang::QualType) + 229
34 clang             0x000000010040094f
clang::Sema::SubstType(clang::TypeSourceInfo*,
clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation,
clang::DeclarationName) + 279
35 clang             0x000000010042aa07 (anonymous
namespace)::TemplateDeclInstantiator::VisitFieldDecl(clang::FieldDecl*) + 215
36 clang             0x000000010042bdec clang::DeclVisitor<(anonymous
namespace)::TemplateDeclInstantiator, clang::Decl*>::Visit(clang::Decl*) + 980
37 clang             0x000000010042d2a9 clang::Sema::SubstDecl(clang::Decl*,
clang::DeclContext*, clang::MultiLevelTemplateArgumentList const&) + 81
38 clang             0x00000001003ffc2a
clang::Sema::InstantiateClass(clang::SourceLocation, clang::CXXRecordDecl*,
clang::CXXRecordDecl*, clang::MultiLevelTemplateArgumentList const&,
clang::TemplateSpecializationKind, bool) + 1044
39 clang             0x000000010041cb27
clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation,
clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind,
bool) + 1723
40 clang             0x000000010042fe24
clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType,
clang::PartialDiagnostic const&, std::pair<clang::SourceLocation,
clang::PartialDiagnostic>) + 288
41 clang             0x00000001004301d4
clang::Sema::RequireCompleteType(clang::SourceLocation, clang::QualType,
unsigned int) + 142
42 clang             0x00000001002b1fef
clang::Sema::CheckFieldDecl(clang::DeclarationName, clang::QualType,
clang::TypeSourceInfo*, clang::RecordDecl*, clang::SourceLocation, bool,
clang::Expr*, clang::SourceLocation, clang::AccessSpecifier, clang::NamedDecl*,
clang::Declarator*) + 233
43 clang             0x00000001002bd750 clang::Sema::HandleField(clang::Scope*,
clang::RecordDecl*, clang::SourceLocation, clang::Declarator&, clang::Expr*,
clang::AccessSpecifier) + 750
44 clang             0x00000001002f03c4
clang::Sema::ActOnCXXMemberDeclarator(clang::Scope*, clang::AccessSpecifier,
clang::Declarator&,
clang::ASTMultiPtr<&(clang::ActionBase::DeleteTemplateParams(void*))>, void*,
void*, bool, bool) + 918
45 clang             0x00000001006a697d
clang::Parser::ParseCXXClassMemberDeclaration(clang::AccessSpecifier,
clang::Parser::ParsedTemplateInfo const&,
clang::Parser::ParsingDeclRAIIObject*) + 3617
46 clang             0x00000001006a7207
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, unsigned int,
clang::OpaquePtr<0>) + 1349
47 clang             0x00000001006a890e
clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool) + 5226
48 clang             0x000000010069bde9
clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext) + 6301
49 clang             0x00000001006dc29c
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsingDeclSpec&,
clang::AttributeList*, clang::AccessSpecifier) + 120
50 clang             0x00000001006dc6bf
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::AttributeList*,
clang::AccessSpecifier) + 83
51 clang             0x00000001006de529
clang::Parser::ParseExternalDeclaration(clang::CXX0XAttributeList) + 2235
52 clang             0x00000001006de673
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<1>&) + 247
53 clang             0x0000000100265337 clang::ParseAST(clang::Preprocessor&,
clang::ASTConsumer*, clang::ASTContext&, bool, bool,
clang::CodeCompleteConsumer*) + 456
54 clang             0x0000000100079062
clang::ASTFrontendAction::ExecuteAction() + 254
55 clang             0x0000000100226940 clang::CodeGenAction::ExecuteAction() +
826
56 clang             0x0000000100079170 clang::FrontendAction::Execute() + 256
57 clang             0x000000010005c380
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 710
58 clang             0x00000001000280d6 cc1_main(char const**, char const**,
char const*, void*) + 1762
59 clang             0x000000010002f836 main + 450
60 clang             0x0000000100026fd4 start + 52
61 clang             0x0000000000000021 start + 4294807681
Stack dump:
0.    Program arguments: /usr/local/bin/clang -cc1 -triple
x86_64-apple-darwin10.0.0 -emit-obj -mrelax-all -disable-free -main-file-name
forward.cc -pic-level 1 -mdisable-fp-elim -masm-verbose -munwind-tables
-target-cpu core2 -resource-dir /usr/local/lib/clang/2.8 -ferror-limit 19
-fmessage-length 80 -stack-protector 1 -fblocks -fexceptions
-fdiagnostics-show-option -fcolor-diagnostics -o
/var/folders/M8/M86fCFVgGQ0r-V2oY5lLC++++TI/-Tmp-/cc-eG7Z8a.o -x c++
/Users/caj/Dropbox/forward.cc 
1.    /Users/caj/Dropbox/forward.cc:16:48: current parser token ';'
2.    /Users/caj/Dropbox/forward.cc:15:1: parsing struct/union/class body
'status'
clang: error: clang frontend command failed due to signal 6 (use -v to see
invocation)

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list