[cfe-dev] pch generation of C++ header failure...

Fons Rademakers Fons.Rademakers at cern.ch
Mon Oct 5 18:13:32 PDT 2009


To follow up. The assert seems to be due to any content in an inline 
function body. This works fine:

class myclass {
    int fInt;
    double fD;
public:
    myclass() : fInt(10), fD(1.1) { }
    virtual ~myclass() { }
};

and this does not work:

class myclass {
    int fInt;
    double fD;
public:
    myclass() { fInt = 10; fD = 1.1; }
    virtual ~myclass() { }
};

Is this expected? During the dev-meeting it was reported that 80% of the 
Qt4 headers could already be parsed. What statement was used to do that? 
Something like:

clang-cc -x=c++-header -fsyntax-only myclass.h   ?


Cheers, Fons.



Fons Rademakers wrote:
> Hi,
> 
>   should pch generation for a simple C++ class already work in clang 
> (trunk of today)?
> 
> I try:
> 
> clang -x c++-header myclass.h
> 
> which gives an assert error:
> 
> Assertion failed: (Writer.Code != pch::STMT_NULL_PTR && "Unhandled 
> expression writing PCH file"), function WriteSubStmt, file 
> /Users/rdm/llvm/src/tools/clang/lib/Frontend/PCHWriterStmt.cpp, line 834.
> 0   clang-cc          0x0000000100ccfee7 PrintStackTrace(void*) + 38
> 1   clang-cc          0x0000000100cd0475 SignalHandler(int) + 336
> 2   libSystem.B.dylib 0x00007fff882480aa _sigtramp + 26
> 3   libSystem.B.dylib 0x00007fff881ecb2a tiny_malloc_from_free_list + 1196
> 4   libSystem.B.dylib 0x00007fff882c40b4 __pthread_markcancel + 0
> 5   clang-cc          0x00000001000b590c 
> clang::PCHWriter::WriteSubStmt(clang::Stmt*) + 232
> 6   clang-cc          0x00000001000b7318 (anonymous 
> namespace)::PCHStmtWriter::VisitMemberExpr(clang::MemberExpr*) + 54
> 7   clang-cc          0x00000001000b50f2 clang::StmtVisitor<(anonymous 
> namespace)::PCHStmtWriter, void>::Visit(clang::Stmt*) + 2742
> 8   clang-cc          0x00000001000b58d9 
> clang::PCHWriter::WriteSubStmt(clang::Stmt*) + 181
> 9   clang-cc          0x00000001000b6b4a (anonymous 
> namespace)::PCHStmtWriter::VisitBinaryOperator(clang::BinaryOperator*) + 54
> 10  clang-cc          0x00000001000b6e57 clang::StmtVisitor<(anonymous 
> namespace)::PCHStmtWriter, void>::VisitBinAssign(clang::BinaryOperator*) 
> + 29
> 11  clang-cc          0x00000001000b48f7 clang::StmtVisitor<(anonymous 
> namespace)::PCHStmtWriter, void>::Visit(clang::Stmt*) + 699
> 12  clang-cc          0x00000001000b58d9 
> clang::PCHWriter::WriteSubStmt(clang::Stmt*) + 181
> 13  clang-cc          0x00000001000b82b0 (anonymous 
> namespace)::PCHStmtWriter::VisitCompoundStmt(clang::CompoundStmt*) + 112
> 14  clang-cc          0x00000001000b4dd4 clang::StmtVisitor<(anonymous 
> namespace)::PCHStmtWriter, void>::Visit(clang::Stmt*) + 1944
> 15  clang-cc          0x00000001000b56f3 clang::PCHWriter::FlushStmts() 
> + 253
> 16  clang-cc          0x00000001000b2c86 
> clang::PCHWriter::WriteDeclsBlock(clang::ASTContext&) + 846
> 17  clang-cc          0x00000001000a48cb 
> clang::PCHWriter::WritePCH(clang::Sema&, clang::MemorizeStatCalls*, char 
> const*) + 1701
> 18  clang-cc          0x0000000100055bee (anonymous 
> namespace)::PCHGenerator::HandleTranslationUnit(clang::ASTContext&) + 256
> 19  clang-cc          0x00000001002847e0 
> clang::ParseAST(clang::Preprocessor&, clang::ASTConsumer*, 
> clang::ASTContext&, bool, bool, clang::CodeCompleteConsumer* 
> (*)(clang::Sema&, void*), void*) + 760
> 20  clang-cc          0x000000010002ba21 
> ProcessInputFile(clang::Preprocessor&, clang::PreprocessorFactory&, 
> std::string const&, ProgActions, llvm::StringMap<bool, 
> llvm::MallocAllocator> const&, llvm::LLVMContext&) + 3664
> 21  clang-cc          0x000000010002d137 main + 3269
> 22  clang-cc          0x00000001000270dc start + 52
> 23  clang-cc          0x0000000000000016 start + 4294807406
> Stack dump:
> 0.      Program arguments: /Users/rdm/llvm/inst/bin/../libexec/clang-cc 
> -triple x86_64-apple-darwin10 -emit-pch -disable-free -main-file-name 
> myclass.h --relocation-model pic -pic-level=1 --disable-fp-elim 
> --unwind-tables=1 --mcpu=core2 --fmath-errno=0 -mmacosx-version-min=10.6 
> -fexceptions -fdiagnostics-show-option -o myclass.h.gch -x c++-header 
> myclass.h
> 1.      <eof> parser at end of file
> clang: error: precompiler command failed due to signal 6 (use -v to see 
> invocation)
> 
> 
> For the attached trivial myclass.h.
> 
> 
> Cheers, Fons.
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

-- 
Org:    CERN, European Laboratory for Particle Physics.
Mail:   1211 Geneve 23, Switzerland
E-Mail: Fons.Rademakers at cern.ch              Phone: +41 22 7679248
WWW:    http://fons.rademakers.org           Fax:   +41 22 7669640



More information about the cfe-dev mailing list