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);
+      }
     }
   }