]> granicus.if.org Git - clang/commitdiff
Implemented support for testing the ASTImporter's
authorSean Callanan <scallanan@apple.com>
Tue, 28 Apr 2015 18:24:12 +0000 (18:24 +0000)
committerSean Callanan <scallanan@apple.com>
Tue, 28 Apr 2015 18:24:12 +0000 (18:24 +0000)
ability to generate code that CodeGen likes.  Test
cases can use this functionality by calling

// RUN: %clang_cc1 -emit-obj -o /dev/null -ast-merge %t.1.ast -ast-merge %t.2.ast %s

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236011 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenAction.cpp
lib/Frontend/ASTMerge.cpp

index 60aac0782e21772fd34d8c8ce6bf5e8307364e84..b06fe424fe0379c94b4520eccefd182f71dca393 100644 (file)
@@ -79,6 +79,11 @@ namespace clang {
     }
 
     void Initialize(ASTContext &Ctx) override {
+      if (Context) {
+        assert(Context == &Ctx);
+        return;
+      }
+        
       Context = &Ctx;
 
       if (llvm::TimePassesIsEnabled)
index 216ac6a169845f6080b71960d42d0913d45ea8a2..b84df94ef806238288d7e9d61c5153779e5b54c4 100644 (file)
@@ -57,6 +57,7 @@ void ASTMergeAction::ExecuteAction() {
                          /*MinimalImport=*/false);
 
     TranslationUnitDecl *TU = Unit->getASTContext().getTranslationUnitDecl();
+    CI.getASTConsumer().Initialize(CI.getASTContext());
     for (auto *D : TU->decls()) {
       // Don't re-import __va_list_tag, __builtin_va_list.
       if (const auto *ND = dyn_cast<NamedDecl>(D))
@@ -64,7 +65,12 @@ void ASTMergeAction::ExecuteAction() {
           if (II->isStr("__va_list_tag") || II->isStr("__builtin_va_list"))
             continue;
       
-      Importer.Import(D);
+      Decl *ToD = Importer.Import(D);
+    
+      if (ToD) {
+        DeclGroupRef DGR(ToD);
+        CI.getASTConsumer().HandleTopLevelDecl(DGR);
+      }
     }
   }