diff options
author | Tom Stellard <tstellar@redhat.com> | 2018-10-25 20:41:01 +0000 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2018-10-25 20:41:01 +0000 |
commit | 1696eef2ac42bb2b8183f8912caa5c1bb51e3a37 (patch) | |
tree | 1ea1f9ae9e619e897f19f239b10832ac9ad37b0c | |
parent | ccf7f5115ee8af18c287d6396542f02ad2329a6f (diff) | |
download | llvm-1696eef2ac42bb2b8183f8912caa5c1bb51e3a37.zip llvm-1696eef2ac42bb2b8183f8912caa5c1bb51e3a37.tar.gz llvm-1696eef2ac42bb2b8183f8912caa5c1bb51e3a37.tar.bz2 |
Merging r340025:
------------------------------------------------------------------------
r340025 | erichkeane | 2018-08-17 06:43:39 -0700 (Fri, 17 Aug 2018) | 8 lines
Fix for bug 38508 - Don't do PCH processing when only generating preprocessor output
This clang-cl driver change removes the PCH options when we are only generating
preprocessed output. This is similar to the behavior of Y-.
Patch by: mikerice
Differential Revision: https://reviews.llvm.org/D50640
------------------------------------------------------------------------
llvm-svn: 345311
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 7 | ||||
-rw-r--r-- | clang/test/Driver/cl-pch.cpp | 21 | ||||
-rw-r--r-- | clang/test/PCH/Inputs/pch-through-use3c.cpp | 2 | ||||
-rw-r--r-- | clang/test/PCH/Inputs/pch-through3c.h | 1 | ||||
-rw-r--r-- | clang/test/PCH/pch-through3c.cpp | 8 |
5 files changed, 36 insertions, 3 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 952a716..b69d65e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2998,9 +2998,10 @@ void Driver::BuildActions(Compilation &C, DerivedArgList &Args, Args.eraseArg(options::OPT__SLASH_Yc); YcArg = nullptr; } - if (Args.hasArg(options::OPT__SLASH_Y_)) { - // /Y- disables all pch handling. Rather than check for it everywhere, - // just remove clang-cl pch-related flags here. + if (FinalPhase == phases::Preprocess || Args.hasArg(options::OPT__SLASH_Y_)) { + // If only preprocessing or /Y- is used, all pch handling is disabled. + // Rather than check for it everywhere, just remove clang-cl pch-related + // flags here. Args.eraseArg(options::OPT__SLASH_Fp); Args.eraseArg(options::OPT__SLASH_Yc); Args.eraseArg(options::OPT__SLASH_Yu); diff --git a/clang/test/Driver/cl-pch.cpp b/clang/test/Driver/cl-pch.cpp index 8521d35..0103db9 100644 --- a/clang/test/Driver/cl-pch.cpp +++ b/clang/test/Driver/cl-pch.cpp @@ -345,3 +345,24 @@ // CHECK-NoSourceTP: pchfile.pch // CHECK-NoSourceTP: -x // CHECK-NoSourceTP: "c++" + +// If only preprocessing, PCH options are ignored. +// RUN: %clang_cl /P /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-YC-P %s +// CHECK-YC-P-NOT: -emit-pch +// CHECK-YC-P-NOT: -include-pch + +// RUN: %clang_cl /E /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-YC-E %s +// CHECK-YC-E-NOT: -emit-pch +// CHECK-YC-E-NOT: -include-pch + +// RUN: %clang_cl /P /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-YU-P %s +// CHECK-YU-P-NOT: -emit-pch +// CHECK-YU-P-NOT: -include-pch + +// RUN: %clang_cl /E /Ycpchfile.h /FIpchfile.h /c -### -- %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-YU-E %s +// CHECK-YU-E-NOT: -emit-pch +// CHECK-YU-E-NOT: -include-pch diff --git a/clang/test/PCH/Inputs/pch-through-use3c.cpp b/clang/test/PCH/Inputs/pch-through-use3c.cpp new file mode 100644 index 0000000..6102c51 --- /dev/null +++ b/clang/test/PCH/Inputs/pch-through-use3c.cpp @@ -0,0 +1,2 @@ +int a = A; +// expected-no-diagnostics diff --git a/clang/test/PCH/Inputs/pch-through3c.h b/clang/test/PCH/Inputs/pch-through3c.h new file mode 100644 index 0000000..ab2a05d --- /dev/null +++ b/clang/test/PCH/Inputs/pch-through3c.h @@ -0,0 +1 @@ +#define A 1 diff --git a/clang/test/PCH/pch-through3c.cpp b/clang/test/PCH/pch-through3c.cpp new file mode 100644 index 0000000..97b98c4 --- /dev/null +++ b/clang/test/PCH/pch-through3c.cpp @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -I %S -emit-pch \ +// RUN: -include Inputs/pch-through3c.h \ +// RUN: -pch-through-header=Inputs/pch-through3c.h -o %t.3c %s + +// RUN: %clang_cc1 -verify -I %S -include-pch %t.3c \ +// RUN: -include Inputs/pch-through3c.h \ +// RUN: -pch-through-header=Inputs/pch-through3c.h \ +// RUN: %S/Inputs/pch-through-use3c.cpp 2>&1 |