
For `c-header` and `c++-header` inputs, Clang driver selects the `-emit-pch` frontend action and defaults the output suffix name to `.gch` (except clang-cl, which uses `.pch`) to follow GCC. ``` clang -c a.h # a.h.gch clang -xc++-header -c a.h # a.h.gch ``` In every other place we prefer `.pch` to `.gch`. E.g. `-include a.h` probes `a.h.pch` before `a.h.gch`, and we have `-include-pch` instead of `-include-gch`. (Clang and GCC use different extension names for C++ modules as well.) This change isn't disruptive because: * Most newer build systems specify explicit output filenames and are unaffected * Implicit output name users almost assuredly use something like `-include a.h`, which probes both `a.h.pch` and `a.h.gch`[^1] [^1]: In the future, we shall stop probing `a.h.gch` for `-include a.h` as the compatibility intended behavior actually gets in the way (https://discourse.llvm.org/t/how-to-have-clang-ignore-gch-directories/51835). This patch is a prerequisite.
41 lines
2.0 KiB
C++
41 lines
2.0 KiB
C++
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
|
|
// Create PCH without codegen.
|
|
// RUN: %clang -x c++-header %S/../Modules/Inputs/codegen-flags/foo.h -### 2>&1 | FileCheck %s -check-prefix=CHECK-PCH-CREATE
|
|
// CHECK-PCH-CREATE: -emit-pch
|
|
// CHECK-PCH-CREATE-NOT: -fmodules-codegen
|
|
// CHECK-PCH-CREATE-NOT: -fmodules-debuginfo
|
|
/// Also test that the default extension name is .pch instead of .gch
|
|
// CHECK-PCH-CREATE: "-o" "{{[^"]+.pch}}"
|
|
|
|
// Create PCH with -fpch-codegen.
|
|
// RUN: %clang -x c++-header -fpch-codegen %S/../Modules/Inputs/codegen-flags/foo.h -o %t/foo-cg.pch -### 2>&1 | FileCheck %s -check-prefix=CHECK-PCH-CODEGEN-CREATE
|
|
// CHECK-PCH-CODEGEN-CREATE: -emit-pch
|
|
// CHECK-PCH-CODEGEN-CREATE: -fmodules-codegen
|
|
// CHECK-PCH-CODEGEN-CREATE: "-x" "c++-header"
|
|
// CHECK-PCH-CODEGEN-CREATE-NOT: -fmodules-debuginfo
|
|
|
|
// Create PCH with -fpch-debuginfo.
|
|
// RUN: %clang -x c++-header -fpch-debuginfo %S/../Modules/Inputs/codegen-flags/foo.h -g -o %t/foo-di.pch -### 2>&1 | FileCheck %s -check-prefix=CHECK-PCH-DEBUGINFO-CREATE
|
|
// CHECK-PCH-DEBUGINFO-CREATE: -emit-pch
|
|
// CHECK-PCH-DEBUGINFO-CREATE: -fmodules-debuginfo
|
|
// CHECK-PCH-DEBUGINFO-CREATE: "-x" "c++-header"
|
|
// CHECK-PCH-DEBUGINFO-CREATE-NOT: -fmodules-codegen
|
|
|
|
// Create PCH's object file for -fpch-codegen.
|
|
// RUN: touch %t/foo-cg.pch
|
|
// RUN: %clang -c -fintegrated-as %t/foo-cg.pch -o %t/foo-cg.o -### 2>&1 | FileCheck %s -check-prefix=CHECK-PCH-CODEGEN-OBJ
|
|
// CHECK-PCH-CODEGEN-OBJ: -emit-obj
|
|
// CHECK-PCH-CODEGEN-OBJ: "-main-file-name" "foo-cg.pch"
|
|
// CHECK-PCH-CODEGEN-OBJ: "-o" "{{.*}}foo-cg.o"
|
|
// CHECK-PCH-CODEGEN-OBJ: "-x" "precompiled-header"
|
|
|
|
// Create PCH's object file for -fpch-debuginfo.
|
|
// RUN: touch %t/foo-di.pch
|
|
// RUN: %clang -c -fintegrated-as %t/foo-di.pch -g -o %t/foo-di.o -### 2>&1 | FileCheck %s -check-prefix=CHECK-PCH-DEBUGINFO-OBJ
|
|
// CHECK-PCH-DEBUGINFO-OBJ: -emit-obj
|
|
// CHECK-PCH-DEBUGINFO-OBJ: "-main-file-name" "foo-di.pch"
|
|
// CHECK-PCH-DEBUGINFO-OBJ: "-o" "{{.*}}foo-di.o"
|
|
// CHECK-PCH-DEBUGINFO-OBJ: "-x" "precompiled-header"
|