// 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.
// 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
# 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