'clang DeclContext::getParent() not returning parent RecordDecl for nested structs
I'm using the following code get parent struct of a nested struct using clang libtooling.
bool VisitRecordDecl(clang::RecordDecl *RD) {
llvm::outs() <<"\n\tTrying to get parents of "<<RD->getNameAsString()<<"\n\n";
clang::RecordDecl *Parent = dyn_cast<clang::RecordDecl>(RD->getParent());
if(!Parent) {
llvm::outs()<<"NULL RecordDecl with dyn_cast\n";
clang::DeclContext *DParent = RD->getParent(); // trying to find what did getParent return
llvm::outs()<<DParent->getDeclKindName()<<"\n"; // prints TransaltionUnit
DParent->dumpDeclContext(); // prints whole source file
}
else{
Parent->dump();
}
return true;
}
This is the source file in which I run the code
struct outer{
struct inner{
int ia;
int ib;
struct deep{
int da;
}dobj;
}iobj;
int oa;
}oboj;
int main(){
return 0;
}
For each invocation of VisitRecordDecl
, getParent
returns a TranslationUnit
which cannot be casted into RecordDecl
to get parent struct of inner or deep struct. getLexicalParent()
returns RecordDecl
correctly but why is getParent()
not working?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|