forked from OSchip/llvm-project
Adding a fixit for includes that cannot be found with angle brackets, but can be found with quoted strings instead. Implements PR13201.
llvm-svn: 160406
This commit is contained in:
parent
4b12ba0ce6
commit
8f94ac6922
|
@ -279,6 +279,8 @@ def note_macro_here : Note<"macro %0 defined here">;
|
|||
|
||||
def err_pp_invalid_directive : Error<"invalid preprocessing directive">;
|
||||
def err_pp_file_not_found : Error<"'%0' file not found">, DefaultFatal;
|
||||
def err_pp_file_not_found_not_fatal : Error<
|
||||
"'%0' file not found with <angled> include; use \"quotes\" instead">;
|
||||
def err_pp_error_opening_file : Error<
|
||||
"error opening file '%0': %1">, DefaultFatal;
|
||||
def err_pp_empty_filename : Error<"empty filename">;
|
||||
|
|
|
@ -1390,8 +1390,27 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
|
|||
}
|
||||
|
||||
if (File == 0) {
|
||||
if (!SuppressIncludeNotFoundError)
|
||||
if (!SuppressIncludeNotFoundError) {
|
||||
// If the file could not be located and it was included via angle
|
||||
// brackets, we can attempt a lookup as though it were a quoted path to
|
||||
// provide the user with a possible fixit.
|
||||
if (isAngled) {
|
||||
File = LookupFile(Filename, false, LookupFrom, CurDir,
|
||||
Callbacks ? &SearchPath : 0,
|
||||
Callbacks ? &RelativePath : 0,
|
||||
getLangOpts().Modules ? &SuggestedModule : 0);
|
||||
if (File) {
|
||||
SourceRange Range(FilenameTok.getLocation(), CharEnd);
|
||||
Diag(FilenameTok, diag::err_pp_file_not_found_not_fatal) <<
|
||||
Filename <<
|
||||
FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\"");
|
||||
}
|
||||
}
|
||||
// If the file is still not found, just go with the vanilla diagnostic
|
||||
if (!File)
|
||||
Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;
|
||||
}
|
||||
if (!File)
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -Wall -pedantic -verify %s
|
||||
// RUN: cp %s %t
|
||||
// RUN: cp %S/fixit-include.h %T
|
||||
// RUN: not %clang_cc1 -fsyntax-only -fixit %t
|
||||
// RUN: %clang_cc1 -Wall -pedantic %t
|
||||
|
||||
#include <fixit-include.h> // expected-error {{'fixit-include.h' file not found with <angled> include; use "quotes" instead}}
|
||||
|
||||
#pragma does_not_exist // expected-warning {{unknown pragma ignored}}
|
||||
|
||||
int main( void ) {
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
// This file is purposefully left empty
|
Loading…
Reference in New Issue