jgorbe created this revision. jgorbe added reviewers: christylee, rsmith, aaron.ballman.
r342177 <https://reviews.llvm.org/rL342177> introduced a hint in cases where an #included file is not found. It tries to find a suggestion by removing leading or trailing non-alphanumeric characters and checking if a matching file exists, then it reports an error like: include-likely-typo.c:3:10: error: '<empty_file_to_include.h>' file not found, did you mean 'empty_file_to_include.h'? #include "<empty_file_to_include.h>" // expected-error {{'<empty_file_to_include.h>' file not found, did you mean 'empty_file_to_include.h'?}} ^~~~~~~~~~~~~~~~~~~~~~~~~~~ "empty_file_to_include.h" 1 error generated. However, if a hint is **not** found, the error message will show only the trimmed name we use to look for a hint, so: #include "/non_existing_file." will result in: include-leading-nonalpha-no-suggest.c:3:10: fatal error: 'non_existing_file_to_include.h' file not found #include "/non_existing_file_to_include.h" // expected-error {{'/non_existing_file_to_include.h' file not found}} ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. where the name reported after `"fatal error:"` doesn't match what the user wrote. This change reports the original file name instead of the trimmed one when a suggestion is not found. Repository: rC Clang https://reviews.llvm.org/D52280 Files: lib/Lex/PPDirectives.cpp test/Preprocessor/include-leading-nonalpha-no-suggest.c test/Preprocessor/include-leading-nonalpha-suggest.c Index: test/Preprocessor/include-leading-nonalpha-suggest.c =================================================================== --- /dev/null +++ test/Preprocessor/include-leading-nonalpha-suggest.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 %s -verify + +#include "/empty_file_to_include.h" // expected-error {{'/empty_file_to_include.h' file not found, did you mean 'empty_file_to_include.h'?}} Index: test/Preprocessor/include-leading-nonalpha-no-suggest.c =================================================================== --- /dev/null +++ test/Preprocessor/include-leading-nonalpha-no-suggest.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 %s -verify + +#include "/non_existing_file_to_include.h" // expected-error {{'/non_existing_file_to_include.h' file not found}} Index: lib/Lex/PPDirectives.cpp =================================================================== --- lib/Lex/PPDirectives.cpp +++ lib/Lex/PPDirectives.cpp @@ -1887,8 +1887,8 @@ // Check for likely typos due to leading or trailing non-isAlphanumeric // characters + StringRef OriginalFilename = Filename; if (!File) { - StringRef OriginalFilename = Filename; while (!isAlphanumeric(Filename.front())) { Filename = Filename.drop_front(); } @@ -1915,7 +1915,7 @@ // If the file is still not found, just go with the vanilla diagnostic if (!File) - Diag(FilenameTok, diag::err_pp_file_not_found) << Filename + Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename << FilenameRange; } }
Index: test/Preprocessor/include-leading-nonalpha-suggest.c =================================================================== --- /dev/null +++ test/Preprocessor/include-leading-nonalpha-suggest.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 %s -verify + +#include "/empty_file_to_include.h" // expected-error {{'/empty_file_to_include.h' file not found, did you mean 'empty_file_to_include.h'?}} Index: test/Preprocessor/include-leading-nonalpha-no-suggest.c =================================================================== --- /dev/null +++ test/Preprocessor/include-leading-nonalpha-no-suggest.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 %s -verify + +#include "/non_existing_file_to_include.h" // expected-error {{'/non_existing_file_to_include.h' file not found}} Index: lib/Lex/PPDirectives.cpp =================================================================== --- lib/Lex/PPDirectives.cpp +++ lib/Lex/PPDirectives.cpp @@ -1887,8 +1887,8 @@ // Check for likely typos due to leading or trailing non-isAlphanumeric // characters + StringRef OriginalFilename = Filename; if (!File) { - StringRef OriginalFilename = Filename; while (!isAlphanumeric(Filename.front())) { Filename = Filename.drop_front(); } @@ -1915,7 +1915,7 @@ // If the file is still not found, just go with the vanilla diagnostic if (!File) - Diag(FilenameTok, diag::err_pp_file_not_found) << Filename + Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename << FilenameRange; } }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits