]> granicus.if.org Git - clang/commitdiff
Make -E work with module imports
authorDouglas Gregor <dgregor@apple.com>
Wed, 14 Sep 2011 23:13:09 +0000 (23:13 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 14 Sep 2011 23:13:09 +0000 (23:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139750 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInstance.cpp
test/Modules/macros.c

index 9a679eed24dddb30f466322406eee04e5f3838ad..9087ab58d6e2a19a55c6a5d68d49b50e705b4cc4 100644 (file)
@@ -736,20 +736,26 @@ ModuleKey CompilerInstance::loadModule(SourceLocation ImportLoc,
   
   // If we don't already have an ASTReader, create one now.
   if (!ModuleManager) {
+    if (!hasASTContext())
+      createASTContext();
+
     std::string Sysroot = getHeaderSearchOpts().Sysroot;
     const PreprocessorOptions &PPOpts = getPreprocessorOpts();
     ModuleManager = new ASTReader(getPreprocessor(), *Context,
                                   Sysroot.empty() ? "" : Sysroot.c_str(),
                                   PPOpts.DisablePCHValidation, 
                                   PPOpts.DisableStatCache);
-    ModuleManager->setDeserializationListener(
-      getASTConsumer().GetASTDeserializationListener());
-    getASTContext().setASTMutationListener(
-      getASTConsumer().GetASTMutationListener());
+    if (hasASTConsumer()) {
+      ModuleManager->setDeserializationListener(
+        getASTConsumer().GetASTDeserializationListener());
+      getASTContext().setASTMutationListener(
+        getASTConsumer().GetASTMutationListener());
+    }
     llvm::OwningPtr<ExternalASTSource> Source;
     Source.reset(ModuleManager);
     getASTContext().setExternalSource(Source);
-    ModuleManager->InitializeSema(getSema());
+    if (hasSema())
+      ModuleManager->InitializeSema(getSema());
   }
   
   // Try to load the module we found.
index 8fefe7a9cffc24e8db537552e9f9747caa2ffa11..899c19bb29c971dabff9c9456a9069f4f7c86f5c 100644 (file)
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 -emit-module -o %t/macros.pcm -DMODULE %s
 // RUN: %clang_cc1 -verify -fmodule-cache-path %t -fdisable-module-hash %s
+// RUN: %clang_cc1 -E -fmodule-cache-path %t -fdisable-module-hash %s | FileCheck -check-prefix CHECK-PREPROCESSED %s
 
 #if defined(MODULE)
 #define INTEGER(X) int
@@ -27,12 +28,14 @@ __import_module__ macros;
 #  error MODULE macro should not be visible
 #endif
 
+// CHECK-PREPROCESSED: double d
 double d;
 DOUBLE *dp = &d;
 
 #__export_macro__ WIBBLE // expected-error{{no macro named 'WIBBLE' to export}}
 
 void f() {
+  // CHECK-PREPROCESSED: int i = INTEGER;
   int i = INTEGER; // the value was exported, the macro was not.
 }
 #endif