]> granicus.if.org Git - clang/commitdiff
Change err_pp_file_not_found back to an Error; when it's a Warning, we suppress it...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 30 Aug 2011 23:07:51 +0000 (23:07 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 30 Aug 2011 23:07:51 +0000 (23:07 +0000)
Fixes <rdar://10041960>.  And also brings down the number of warnings without a flag by one :)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138842 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticLexKinds.td
include/clang/Lex/Preprocessor.h
lib/Frontend/DependencyFile.cpp
lib/Lex/PPDirectives.cpp
lib/Lex/Pragma.cpp
test/Misc/warning-flags.c
test/Preprocessor/missing-system-header.c [new file with mode: 0644]
test/Preprocessor/missing-system-header.h [new file with mode: 0644]

index d40e2cde03061edd496f5b73534be9dc8902c387..275e8a1e2897929b6debf4e7fbf0ffd2fc662831 100644 (file)
@@ -186,7 +186,7 @@ def ext_empty_fnmacro_arg : Extension<
 
 def err_pp_invalid_directive : Error<"invalid preprocessing directive">;
 def err_pp_hash_error : Error<"#error%0">;
-def warn_pp_file_not_found : Warning<"'%0' file not found">, DefaultFatal;
+def err_pp_file_not_found : Error<"'%0' file not found">, DefaultFatal;
 def err_pp_error_opening_file : Error<
   "error opening file '%0': %1">, DefaultFatal;
 def err_pp_empty_filename : Error<"empty filename">;
index b14c7e838228c9e2f95c3d31240ea944a8573ff7..c3557a5e93e1cae3c711fd355a6f53df69bfecb8 100644 (file)
@@ -105,6 +105,7 @@ class Preprocessor : public llvm::RefCountedBase<Preprocessor> {
   // State that is set before the preprocessor begins.
   bool KeepComments : 1;
   bool KeepMacroComments : 1;
+  bool SuppressIncludeNotFoundError : 1;
 
   // State that changes while the preprocessor runs:
   bool InMacroArgs : 1;            // True if parsing fn macro invocation args.
@@ -344,6 +345,14 @@ public:
 
   bool getCommentRetentionState() const { return KeepComments; }
 
+  void SetSuppressIncludeNotFoundError(bool Suppress) {
+    SuppressIncludeNotFoundError = Suppress;
+  }
+
+  bool GetSuppressIncludeNotFoundError() {
+    return SuppressIncludeNotFoundError;
+  }
+
   /// isCurrentLexer - Return true if we are lexing directly from the specified
   /// lexer.
   bool isCurrentLexer(const PreprocessorLexer *L) const {
index 843586437821cd608b11bc9bd5356e8d21c8ade6..db43ab9bbe11a163e6e3ca035dc28c0fe6b29988 100644 (file)
@@ -86,14 +86,8 @@ void clang::AttachDependencyFileGen(Preprocessor &PP,
   }
 
   // Disable the "file not found" diagnostic if the -MG option was given.
-  // FIXME: Ideally this would live in the driver, but we don't have the ability
-  // to remap individual diagnostics there without creating a DiagGroup, in
-  // which case we would need to prevent the group name from showing up in
-  // diagnostics.
-  if (Opts.AddMissingHeaderDeps) {
-    PP.getDiagnostics().setDiagnosticMapping(diag::warn_pp_file_not_found,
-                                            diag::MAP_IGNORE, SourceLocation());
-  }
+  if (Opts.AddMissingHeaderDeps)
+    PP.SetSuppressIncludeNotFoundError(true);
 
   PP.addPPCallbacks(new DependencyFileCallback(&PP, OS, Opts));
 }
index 39a358d976e6ac9bb6e8d11e597019a299fc918c..99383e4791ba17bb5ce4fdf85dd9874337061411 100644 (file)
@@ -1187,7 +1187,8 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
                                   End, SearchPath, RelativePath);
 
   if (File == 0) {
-    Diag(FilenameTok, diag::warn_pp_file_not_found) << Filename;
+    if (!SuppressIncludeNotFoundError)
+      Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;
     return;
   }
 
index 1d0b5e4f2d02b93408757c1ae6f30c0b0373798f..92c0dd53207c2ad4dbceaff260c70b64988c18a6 100644 (file)
@@ -368,7 +368,8 @@ void Preprocessor::HandlePragmaDependency(Token &DependencyTok) {
   const DirectoryLookup *CurDir;
   const FileEntry *File = LookupFile(Filename, isAngled, 0, CurDir, NULL, NULL);
   if (File == 0) {
-    Diag(FilenameTok, diag::warn_pp_file_not_found) << Filename;
+    if (!SuppressIncludeNotFoundError)
+      Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;
     return;
   }
 
index e29fbeadf9a79b5c4b7e453e17beff0b0bd36433..a911cbb27eedb952fa62a1d2b8ffe2f3d72fddf4 100644 (file)
@@ -17,7 +17,7 @@ This test serves two purposes:
 
 The list of warnings below should NEVER grow.  It should gradually shrink to 0.
 
-CHECK: Warnings without flags (313):
+CHECK: Warnings without flags (312):
 CHECK-NEXT:   auto_storage_class
 CHECK-NEXT:   backslash_newline_space
 CHECK-NEXT:   charize_microsoft_ext
@@ -253,7 +253,6 @@ CHECK-NEXT:   warn_pointer_attribute_wrong_type
 CHECK-NEXT:   warn_pp_convert_lhs_to_positive
 CHECK-NEXT:   warn_pp_convert_rhs_to_positive
 CHECK-NEXT:   warn_pp_expr_overflow
-CHECK-NEXT:   warn_pp_file_not_found
 CHECK-NEXT:   warn_pp_line_decimal
 CHECK-NEXT:   warn_pragma_align_expected_equal
 CHECK-NEXT:   warn_pragma_align_invalid_option
diff --git a/test/Preprocessor/missing-system-header.c b/test/Preprocessor/missing-system-header.c
new file mode 100644 (file)
index 0000000..69cb131
--- /dev/null
@@ -0,0 +1,2 @@
+// RUN: %clang_cc1 -verify -fsyntax-only %s
+#include "missing-system-header.h"
diff --git a/test/Preprocessor/missing-system-header.h b/test/Preprocessor/missing-system-header.h
new file mode 100644 (file)
index 0000000..393ab2b
--- /dev/null
@@ -0,0 +1,2 @@
+#pragma clang system_header
+#include "not exist"  // expected-error {{file not found}}