mirror of https://github.com/microsoft/clang.git
Change err_pp_file_not_found back to an Error; when it's a Warning, we suppress it in system headers. And it is not a good idea to suppress it in system headers. (This was originally changed in r134996 to implement -MG.)
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
This commit is contained in:
parent
1155c42e7b
commit
f84139a133
|
@ -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">;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
// RUN: %clang_cc1 -verify -fsyntax-only %s
|
||||
#include "missing-system-header.h"
|
|
@ -0,0 +1,2 @@
|
|||
#pragma clang system_header
|
||||
#include "not exist" // expected-error {{file not found}}
|
Loading…
Reference in New Issue