[cfe-dev] Get name from RecordDecl
Mikhail Ramalho via cfe-dev
cfe-dev at lists.llvm.org
Fri May 6 05:02:43 PDT 2016
Hello all,
Currently, I'm using libTooling to generate the program's AST, which later
I translate to our own AST, but I'm having some trouble retrieving the name
of this RecordDecl:
typedef struct
{
int __count;
* union*
* {*
* int __wch;*
* char __wchb[4];*
* } __value;*
} __mbstate_t;
To get the recordDecl name, I'm using two methods:
bool clang_c_convertert::get_tag_name(
const clang::RecordDecl& rd,
std::string &name)
{
name = get_decl_name(rd);
if(!name.empty())
return false;
// Try to get the name from typedef (if one exists)
if (const clang::TagDecl *tag = llvm::dyn_cast<clang::TagDecl>(&rd))
{
if (const clang::TypedefNameDecl *tnd = rd.getTypedefNameForAnonDecl())
{
name = get_decl_name(*tnd);
return false;
}
else if (tag->getIdentifier())
{
name = get_decl_name(*tag);
return false;
}
}
*assert(rd.isAnonymousStructOrUnion());*
return get_anon_tag_name(rd, name); // This build's a name based on the
tag type
}
Where the method get_decl_name is:
std::string clang_c_convertert::get_decl_name(
const clang::NamedDecl &decl)
{
if(const clang::IdentifierInfo *identifier = decl.getIdentifier())
return identifier->getName().str();
std::string name;
llvm::raw_string_ostream rso(name);
decl.printName(rso);
return rso.str();
}
The problem is the inner union, which is not anonymous but I can't get the
name. The bold assertion always fails.
Is there a way to get the union name, in this case?
Btw, I get there when parsing a varDecl and calling varDecl.getType(). It
returns a RecordType and I call .getDecl() to parse the union declaration.
Thank you,
--
Mikhail Ramalho.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160506/7091c5a8/attachment.html>
More information about the cfe-dev
mailing list