From 17da34d2bd42e763ad9995a01a5d8784137a476c Mon Sep 17 00:00:00 2001 From: Bruno Cardoso Lopes Date: Tue, 7 Feb 2017 21:54:57 +0000 Subject: [PCH] Fix a regression when PCH is used with -fmodules Following up on r291465 after a regression in r276159. When we use -fmodule-name=X while building a PCH, modular headers in X will be textually included and the compiler knows that we are not building module X, so don't serialize such headers in the PCH as being part of a module, because at this point they are not. This was causing subtle bugs and malformed AST crashes, for instance, when using the PCH in subsequent compiler invocation with -fmodules, the HFI for a modular header would map to the PCH, which would force a module load of and unexistent module ID. rdar://problem/30171164 llvm-svn: 294361 --- clang/test/Modules/Inputs/invalid-module-id/NC-Prefix.pch | 3 +++ .../test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NC.h | 1 + .../Inputs/invalid-module-id/NC.framework/Headers/NU-Visibility.h | 1 + .../Inputs/invalid-module-id/NC.framework/Headers/NUGeometry.h | 1 + .../Inputs/invalid-module-id/NC.framework/Modules/module.modulemap | 6 ++++++ .../invalid-module-id/NC.framework/Modules/module.private.modulemap | 5 +++++ .../Inputs/invalid-module-id/NC.framework/PrivateHeaders/NUAssert.h | 1 + .../Inputs/invalid-module-id/NC.framework/PrivateHeaders/NULog.h | 1 + 8 files changed, 19 insertions(+) create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC-Prefix.pch create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NC.h create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NU-Visibility.h create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NUGeometry.h create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.modulemap create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.private.modulemap create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NUAssert.h create mode 100644 clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NULog.h (limited to 'clang/test/Modules/Inputs') diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC-Prefix.pch b/clang/test/Modules/Inputs/invalid-module-id/NC-Prefix.pch new file mode 100644 index 00000000000..73a9816a3ab --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC-Prefix.pch @@ -0,0 +1,3 @@ +#ifdef __OBJC__ + #import +#endif diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NC.h b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NC.h new file mode 100644 index 00000000000..3866c888282 --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NC.h @@ -0,0 +1 @@ +#import diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NU-Visibility.h b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NU-Visibility.h new file mode 100644 index 00000000000..1e7614c0c38 --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NU-Visibility.h @@ -0,0 +1 @@ +// NU-Visibility.h diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NUGeometry.h b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NUGeometry.h new file mode 100644 index 00000000000..8923e042db6 --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Headers/NUGeometry.h @@ -0,0 +1 @@ +#import diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.modulemap b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.modulemap new file mode 100644 index 00000000000..475b4147336 --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module NC { + umbrella header "NC.h" + + export * + module * { export * } +} diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.private.modulemap b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.private.modulemap new file mode 100644 index 00000000000..80488bd5d3d --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/Modules/module.private.modulemap @@ -0,0 +1,5 @@ +explicit module NC.Private +{ + header "NULog.h" + header "NUAssert.h" +} diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NUAssert.h b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NUAssert.h new file mode 100644 index 00000000000..7bf8defa8cc --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NUAssert.h @@ -0,0 +1 @@ +#import diff --git a/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NULog.h b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NULog.h new file mode 100644 index 00000000000..8923e042db6 --- /dev/null +++ b/clang/test/Modules/Inputs/invalid-module-id/NC.framework/PrivateHeaders/NULog.h @@ -0,0 +1 @@ +#import -- cgit v1.2.3