]> granicus.if.org Git - clang/commitdiff
Add a cc1 flag for setting the existing Preprocessor option 'AllowPCHWithCompilerErrors'.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 27 Feb 2017 02:06:18 +0000 (02:06 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Mon, 27 Feb 2017 02:06:18 +0000 (02:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@296306 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/CC1Options.td
lib/Frontend/CompilerInvocation.cpp
test/Index/pch-from-libclang.c

index f0e2bfe02fc26211c3740578277a1c6f44649732..c1af47e0d7fa71b8cde9d217df59d2518b5db981 100644 (file)
@@ -588,6 +588,8 @@ def pic_is_pie : Flag<["-"], "pic-is-pie">,
   HelpText<"File is for a position independent executable">;
 def fno_validate_pch : Flag<["-"], "fno-validate-pch">,
   HelpText<"Disable validation of precompiled headers">;
+def fallow_pch_with_errors : Flag<["-"], "fallow-pch-with-compiler-errors">,
+  HelpText<"Accept a PCH file that was created with compiler errors">;
 def dump_deserialized_pch_decls : Flag<["-"], "dump-deserialized-decls">,
   HelpText<"Dump declarations that are deserialized from PCH, for testing">;
 def error_on_deserialized_pch_decl : Separate<["-"], "error-on-deserialized-decl">,
index 2ef96398c0d9d5d20482b75a9cfcd1d1ffd6560c..59db36d508cb60d2dc67e4595b01484b16bb6495 100644 (file)
@@ -2296,6 +2296,7 @@ static void ParsePreprocessorArgs(PreprocessorOptions &Opts, ArgList &Args,
   Opts.UsePredefines = !Args.hasArg(OPT_undef);
   Opts.DetailedRecord = Args.hasArg(OPT_detailed_preprocessing_record);
   Opts.DisablePCHValidation = Args.hasArg(OPT_fno_validate_pch);
+  Opts.AllowPCHWithCompilerErrors = Args.hasArg(OPT_fallow_pch_with_errors);
 
   Opts.DumpDeserializedPCHDecls = Args.hasArg(OPT_dump_deserialized_pch_decls);
   for (const Arg *A : Args.filtered(OPT_error_on_deserialized_pch_decl))
index 056cd0a189982f764d275ac0b9eded53f773f5a4..f6ee81e0cdc7c4daa18b6ca30f62f81aa3255c10 100644 (file)
@@ -3,17 +3,19 @@
 // FIXME: Non-darwin bots fail. Would need investigation using -module-file-info to see what is the difference in modules generated from libclang vs the compiler invocation, in those systems.
 // REQUIRES: system-darwin
 
+// RUN: %clang_cc1 -fsyntax-only %s -verify
 // RUN: c-index-test -write-pch %t.h.pch %s -fmodules -fmodules-cache-path=%t.mcp -Xclang -triple -Xclang x86_64-apple-darwin
-// RUN: %clang -fsyntax-only -include %t.h %s -Xclang -verify -fmodules -fmodules-cache-path=%t.mcp -Xclang -detailed-preprocessing-record -Xclang -triple -Xclang x86_64-apple-darwin
-
-// expected-no-diagnostics
+// RUN: %clang -fsyntax-only -include %t.h %s -Xclang -verify -fmodules -fmodules-cache-path=%t.mcp -Xclang -detailed-preprocessing-record -Xclang -triple -Xclang x86_64-apple-darwin -Xclang -fallow-pch-with-compiler-errors
 
 #ifndef HEADER
 #define HEADER
 
 struct S { int x; };
 
+void some_function(undeclared_type p); // expected-error{{unknown type name}}
+
 #else
+// expected-no-diagnostics
 
 void test(struct S *s) {
   s->x = 0;