forked from OSchip/llvm-project
clang-cl: Add more tests for the interaction of /FI and /Yc /Yu.
Most things even work; see the included FIXMEs for things that need polishing. Also don't warn about unused flags for the `/Yuh2.h /FIh1.h /FIh2.h`. The common case is that the pch was built with `/Ych2.h /FIh1.h /FIh2.h`, so h1.h is in the PCH, and we shouldn't warn about /FIh1.h not having an effect. (If we wanted to get fancy, we could store the list of -include flags in the pch and then check that it matches later on.) llvm-svn: 264178
This commit is contained in:
parent
c35c10593b
commit
d1728f0e5f
|
@ -428,7 +428,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA,
|
|||
// FIXME: The code here assumes that /Yc and /Yu refer to the same file.
|
||||
// cl.exe seems to support both flags with different values, but that
|
||||
// seems strange (which flag does /Fp now refer to?), so don't implement
|
||||
// that until someone needs that.
|
||||
// that until someone needs it.
|
||||
int PchIndex = YcIndex != -1 ? YcIndex : YuIndex;
|
||||
if (PchIndex != -1) {
|
||||
if (isa<PrecompileJobAction>(JA)) {
|
||||
|
@ -438,8 +438,10 @@ void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA,
|
|||
continue;
|
||||
} else {
|
||||
// When using the pch, skip all includes prior to the pch.
|
||||
if (AI < PchIndex)
|
||||
if (AI < PchIndex) {
|
||||
A->claim();
|
||||
continue;
|
||||
}
|
||||
if (AI == PchIndex) {
|
||||
A->claim();
|
||||
CmdArgs.push_back("-include-pch");
|
||||
|
|
|
@ -22,3 +22,32 @@
|
|||
// CHECK-YU-NOT: Note: including file: {{.*header1.h}}
|
||||
// CHECK-YU-NOT: Note: including file: {{.*header2.h}}
|
||||
// CHECK-YU: Note: including file: {{[^ ]*header3.h}}
|
||||
|
||||
// When not using pch at all, all the /FI files are printed.
|
||||
// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /FIheader2.h /c /Fo%t -- %s \
|
||||
// RUN: | FileCheck --strict-whitespace -check-prefix=CHECK-FI %s
|
||||
// CHECK-FI: Note: including file: {{[^ ]*header2.h}}
|
||||
// CHECK-FI: Note: including file: {{[^ ]*header1.h}}
|
||||
// CHECK-FI: Note: including file: {{[^ ]*header3.h}}
|
||||
|
||||
// Also check that /FI arguments before the /Yc / /Yu flags are printed right.
|
||||
|
||||
// /FI flags before the /Yc arg should be printed, /FI flags after it shouldn't.
|
||||
// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Ycheader2.h /FIheader0.h /FIheader2.h /FIheader4.h /Fp%t.pch /c /Fo%t -- %s \
|
||||
// RUN: | FileCheck --strict-whitespace -check-prefix=CHECK-YCFI %s
|
||||
// FIXME: The order of the first two lines here must be reversed:
|
||||
// CHECK-YCFI: Note: including file: {{[^ ]*header2.h}}
|
||||
// CHECK-YCFI: Note: including file: {{[^ ]*header0.h}}
|
||||
// FIXME: header1.h should be indented one more:
|
||||
// CHECK-YCFI: Note: including file: {{[^ ]*header1.h}}
|
||||
// CHECK-YCFI: Note: including file: {{[^ ]*header4.h}}
|
||||
// CHECK-YCFI: Note: including file: {{[^ ]*header3.h}}
|
||||
|
||||
// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Yuheader2.h /FIheader0.h /FIheader2.h /FIheader4.h /Fp%t.pch /c /Fo%t -- %s \
|
||||
// RUN: | FileCheck --strict-whitespace -check-prefix=CHECK-YUFI %s
|
||||
// CHECK-YUFI-NOT: Note: including file: {{.*pch}}
|
||||
// CHECK-YUFI-NOT: Note: including file: {{.*header0.h}}
|
||||
// CHECK-YUFI-NOT: Note: including file: {{.*header2.h}}
|
||||
// CHECK-YUFI-NOT: Note: including file: {{.*header1.h}}
|
||||
// CHECK-YUFI: Note: including file: {{[^ ]*header4.h}}
|
||||
// CHECK-YUFI: Note: including file: {{[^ ]*header3.h}}
|
||||
|
|
Loading…
Reference in New Issue