Fix duplicate destructor issue.
We now explicitly require static variable destructors to be created in
HandleTranslationUnitPre() and global variable destructors to be created
in HandleTopLevelDecl().
Bug: 3092382
Change-Id: If9176c81951edb3430f1ad6ae80f9a06d73f5fd7
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index 31ac84e..67f2406 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -97,7 +97,10 @@
// Process any non-static function declarations
for (clang::DeclGroupRef::iterator I = D.begin(), E = D.end(); I != E; I++) {
- AnnotateFunction(dyn_cast<clang::FunctionDecl>(*I));
+ clang::FunctionDecl *FD = dyn_cast<clang::FunctionDecl>(*I);
+ if (FD && FD->isGlobal()) {
+ AnnotateFunction(FD);
+ }
}
Backend::HandleTopLevelDecl(D);
@@ -160,7 +163,10 @@
E = TUDecl->decls_end(); I != E; I++) {
if ((I->getKind() >= clang::Decl::firstFunction) &&
(I->getKind() <= clang::Decl::lastFunction)) {
- AnnotateFunction(static_cast<clang::FunctionDecl*>(*I));
+ clang::FunctionDecl *FD = dyn_cast<clang::FunctionDecl>(*I);
+ if (FD && !FD->isGlobal()) {
+ AnnotateFunction(FD);
+ }
}
}