From: Douglas Gregor Date: Wed, 14 Sep 2011 23:13:09 +0000 (+0000) Subject: Make -E work with module imports X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=de8a9050d79d66325a18168a0994fed125a7790d;p=clang Make -E work with module imports git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139750 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 9a679eed24..9087ab58d6 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -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 Source; Source.reset(ModuleManager); getASTContext().setExternalSource(Source); - ModuleManager->InitializeSema(getSema()); + if (hasSema()) + ModuleManager->InitializeSema(getSema()); } // Try to load the module we found. diff --git a/test/Modules/macros.c b/test/Modules/macros.c index 8fefe7a9cf..899c19bb29 100644 --- a/test/Modules/macros.c +++ b/test/Modules/macros.c @@ -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