summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Frontend/CompilerInstance.cpp16
-rw-r--r--clang/test/Modules/macros.c3
2 files changed, 14 insertions, 5 deletions
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index 9a679eed24d..9087ab58d6e 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/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<ExternalASTSource> 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/clang/test/Modules/macros.c b/clang/test/Modules/macros.c
index 8fefe7a9cff..899c19bb29c 100644
--- a/clang/test/Modules/macros.c
+++ b/clang/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
OpenPOWER on IntegriCloud