[cfe-dev] Clang tutorial

Simone Pellegrini spellegrini at dps.uibk.ac.at
Wed May 27 04:00:42 PDT 2009


Eli Friedman wrote:
> On Wed, May 27, 2009 at 1:57 AM, Simone Pellegrini
> <spellegrini at dps.uibk.ac.at> wrote:
>   
>> Hello,
>> thanks for the example but this is what I am currently doing in my program.
>>
>> The problem is that every time I include some header like stdio.h in my code
>> I get this error from the parser:
>>
>> Adding /home/spellegrini/shared/openmpi-1.3.2-gcc433/include
>> ** Parsing file: bench/example.c **
>> initialize
>> In file included from bench/example.c:7:
>> /home/spellegrini/shared/llvm/lib/clang/1.0/include//stdarg.h:29:9: error:
>> unknown type name '__builtin_va_list'
>>
>> This was not happening with previous versions of CLANG, so what has been
>> changed? What's the problem with this __builtin_va_list??
>> How can I make clang able to parse it without complaining?
>>     
>
> My best guess is that you're missing a call to InitializePreprocessor.
>
>   
your guess was correct! :)

but now I have another error when clang is parsing the standard headers:

** Parsing file: bench/example.c **
initialize
In file included from bench/example.c:8:
In file included from /usr/include/stdio.h:72:
In file included from /usr/include/libio.h:32:
/usr/include/_G_config.h:50:25: warning: field '__cd' with variable 
sized type 'struct __gconv_info' not at the end of a struct or class is 
a GNU extension
0   my_app 0x000000000063dca0
1   my_app 0x000000000063e181
2   libpthread.so.0 0x000000300090c5b0
3   m_app 0x00000000005909ff
...
25  libc.so.6       0x000000300021c40b __libc_start_main + 219
26  my_app 0x000000000040d6fa std::ios_base::Init::~Init() + 90
Stack dump:
0.    Program arguments: ./build/my_app 
-I/home/spellegrini/shared/openmpi-1.3.2-gcc433/include bench/example.c
1.    /usr/include/_G_config.h:52:5: current parser token '__combined'
2.    /usr/include/_G_config.h:45:9: parsing struct/union body
3.    /usr/include/_G_config.h:48:3: parsing struct/union body '::'
Segmentation fault (core dumped)

so the warning should be just a warning, why the parser is exiting with 
a segmentation fault?

here it is the backtrace:

(gdb) backtrace
#0  0x00000000005909ff in Lexer (this=0x7fbfff7140, fileloc={ID = 
91216}, features=@0x0,
    BufStart=0x8fb780 "/* This file is needed by libio to define various 
configuration parameters.\n   These are always the same in the GNU C 
library.  */\n\n#ifndef _G_config_h\n#define _G_config_h 1\n\n/* Define 
types for libio"...,
    BufPtr=0x8fbc4a "__cd;\n    struct __gconv_step_data __data;\n  } 
__combined;\n} _G_iconv_t;\n\ntypedef int _G_int16_t __attribute__ 
((__mode__ (__HI__)));\ntypedef int _G_int32_t __attribute__ ((__mode__ 
(__SI__)));\ntypede"..., BufEnd=0x8fc1f0 "") at Lexer.cpp:116
#1  0x000000000059445f in clang::Lexer::MeasureTokenLength (Loc={ID = 
91216}, SM=@0x7fbfffec90, LangOpts=@0x0) at Lexer.cpp:235
#2  0x00000000005bdc88 in 
clang::TextDiagnosticPrinter::EmitCaretDiagnostic (this=0x8c2610, 
Loc={ID = 91216}, Ranges=0x7fbfff74b0, NumRanges=0, SM=@0x7fbfffec90,
    Hints=0x0, NumHints=0, Columns=170) at TextDiagnosticPrinter.cpp:296
#3  0x00000000005bebaf in clang::TextDiagnosticPrinter::HandleDiagnostic 
(this=0x8c2610, Level=clang::Diagnostic::Warning, Info=@0x7fbfff7710)
    at TextDiagnosticPrinter.cpp:706
#4  0x00000000005fc0ed in clang::Diagnostic::ProcessDiag 
(this=0x7fbfffe658) at Diagnostic.cpp:476
#5  0x000000000042dbe4 in clang::DiagnosticBuilder::Emit 
(this=0x7fbfff7a00) at 
/home/spellegrini/llvm/tools/clang/lib/Parse/../../include/clang/Basic/Diagnostic.h:468
#6  0x000000000042a8c0 in ~SemaDiagnosticBuilder (this=0x7fbfff7a00) at 
Sema.cpp:319
#7  0x0000000000434382 in clang::Sema::ActOnFields (this=0x7fbfffde10, 
S=0x8c5150, RecLoc={ID = 91181}, RecDecl={Ptr = 0x92dcf0}, 
Fields=0x7fbfff9b10, NumFields=2,
    LBrac={ID = 91190}, RBrac={ID = 91261}, Attr=0x0) at SemaDecl.cpp:4060
#8  0x00000000005d2ad2 in clang::Parser::ParseStructUnionBody 
(this=0x7fbfffe410, RecordLoc={ID = 91181}, TagType=13, TagDecl={Ptr = 
0x92dcf0}) at ParseDecl.cpp:1392
#9  0x00000000005d8f48 in clang::Parser::ParseClassSpecifier 
(this=0x7fbfffe410, TagTokKind=clang::tok::kw_struct, StartLoc={ID = 
91181}, DS=@0x7fbfffcf20,
    TemplateInfo=@0x7fbfffa490, AS=clang::AS_none) at ParseDeclCXX.cpp:598
#10 0x00000000005cf4c3 in clang::Parser::ParseDeclarationSpecifiers 
(this=0x7fbfffe410, DS=@0x7fbfffcf20, TemplateInfo=@0x7fbfffa490, 
AS=clang::AS_none)
    at ParseDecl.cpp:931
#11 0x00000000005cf86c in clang::Parser::ParseSpecifierQualifierList 
(this=0x7fbfffe410, DS=@0x7fbfffcf20) at ParseDecl.cpp:454
#12 0x00000000005d20e0 in clang::Parser::ParseStructDeclaration 
(this=0x7fbfffe410, DS=@0x7fbfffcf20, Fields=@0x7fbfffae40) at 
ParseDecl.cpp:1236
#13 0x00000000005d25ec in clang::Parser::ParseStructUnionBody 
(this=0x7fbfffe410, RecordLoc={ID = 91143}, TagType=12, TagDecl={Ptr = 
0x8fd7d0}) at ParseDecl.cpp:1337
#14 0x00000000005d8f48 in clang::Parser::ParseClassSpecifier 
(this=0x7fbfffe410, TagTokKind=clang::tok::kw_union, StartLoc={ID = 
91143}, DS=@0x7fbfffdae0,
    TemplateInfo=@0x7fbfffdb60, AS=clang::AS_none) at ParseDeclCXX.cpp:598
#15 0x00000000005cf4c3 in clang::Parser::ParseDeclarationSpecifiers 
(this=0x7fbfffe410, DS=@0x7fbfffdae0, TemplateInfo=@0x7fbfffdb60, 
AS=clang::AS_none)
    at ParseDecl.cpp:931
#16 0x00000000005d327a in clang::Parser::ParseSimpleDeclaration 
(this=0x7fbfffe410, Context=0, DeclEnd=@0x7fbfffdc20, RequireSemi=true) 
at ParseDecl.cpp:270
#17 0x00000000005d3517 in clang::Parser::ParseDeclaration 
(this=0x7fbfffe410, Context=0, DeclEnd=@0x7fbfffdc20) at ParseDecl.cpp:250
#18 0x00000000005c73d9 in clang::Parser::ParseExternalDeclaration 
(this=0x7fbfffe410) at Parser.cpp:428
#19 0x00000000005c74a5 in clang::Parser::ParseTopLevelDecl 
(this=0x7fbfffe410, Result=@0x7fbfffe5b0) at Parser.cpp:334
#20 0x0000000000429962 in clang::ParseAST (PP=@0x8c6780, 
Consumer=0x7fbffff2d0, Ctx=@0x7fbfffee80, PrintStats=false, 
CompleteTranslationUnit=true) at ParseAST.cpp:64
#21 0x000000000040fd62 in main (argc=3, argv=0x7fbffff4e8) at main.cpp:446

> -Eli
>   




More information about the cfe-dev mailing list