[cfe-dev] Crash in TagType::getAsString()

Alexei Svitkine alexei.svitkine at gmail.com
Tue Jan 13 13:55:37 PST 2009


I have the following input:

int main(void)
{
  struct X { int a, b; };
  struct X x;
  x;
  return 0;
}

Which becomes:

(CompoundStmt 0x1c087c0
  (DeclStmt 0x1c086f0
    0x1c08580 "struct X;"
  (DeclStmt 0x1c08740
    0x1c08710 "struct X x"
  (DeclRefExpr 0x1c08770 'struct X' Var='x' 0x1c08710)
  (ReturnStmt 0x1c087b0
    (IntegerLiteral 0x1c08790 'int' 0)))

Now when I take the DeclRefExpr and call getType().getAsString(), I get a crash:

clang::TagType::getAsStringInternal (this=0x1c0a080,
InnerString=@0xbffff62c) at Type.cpp:1148

It seems that "getDecl()->getIdentifier()->getName()" on TagType
returns something invalid.

Interestingly, the dump shows "struct X" just fine, so perhaps it's
another user error on my part... though this time I am retaining the
AST and I am getting correct results with other inputs...

-Alexei



More information about the cfe-dev mailing list