[cfe-commits] r139750 - in /cfe/trunk: lib/Frontend/CompilerInstance.cpp test/Modules/macros.c

Douglas Gregor dgregor at apple.com
Wed Sep 14 16:13:09 PDT 2011


Author: dgregor
Date: Wed Sep 14 18:13:09 2011
New Revision: 139750

URL: http://llvm.org/viewvc/llvm-project?rev=139750&view=rev
Log:
Make -E work with module imports

Modified:
    cfe/trunk/lib/Frontend/CompilerInstance.cpp
    cfe/trunk/test/Modules/macros.c

Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=139750&r1=139749&r2=139750&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Wed Sep 14 18:13:09 2011
@@ -736,20 +736,26 @@
   
   // 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.

Modified: cfe/trunk/test/Modules/macros.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/macros.c?rev=139750&r1=139749&r2=139750&view=diff
==============================================================================
--- cfe/trunk/test/Modules/macros.c (original)
+++ cfe/trunk/test/Modules/macros.c Wed Sep 14 18:13:09 2011
@@ -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 @@
 #  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





More information about the cfe-commits mailing list