forked from OSchip/llvm-project
If any Fix-Its attached to a diagnostic have invalid source locations
or source locations that refer into a macro instantiation, delete all of the Fix-Its on that diagnostic. llvm-svn: 124833
This commit is contained in:
parent
cd25b86fb9
commit
149239651d
|
@ -560,6 +560,19 @@ bool DiagnosticIDs::ProcessDiag(Diagnostic &Diag) const {
|
|||
Diag.SetDelayedDiagnostic(diag::fatal_too_many_errors);
|
||||
}
|
||||
|
||||
// If we have any Fix-Its, make sure that all of the Fix-Its point into
|
||||
// source locations that aren't macro instantiations. If any point into
|
||||
// macro instantiations, remove all of the Fix-Its.
|
||||
for (unsigned I = 0, N = Diag.NumFixItHints; I != N; ++I) {
|
||||
const FixItHint &FixIt = Diag.FixItHints[I];
|
||||
if (FixIt.RemoveRange.isInvalid() ||
|
||||
FixIt.RemoveRange.getBegin().isMacroID() ||
|
||||
FixIt.RemoveRange.getEnd().isMacroID()) {
|
||||
Diag.NumFixItHints = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, report it.
|
||||
Diag.Client->HandleDiagnostic((Diagnostic::Level)DiagLevel, Info);
|
||||
if (Diag.Client->IncludeInDiagnosticCounts()) {
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: c-index-test -test-load-source all -fspell-checking %s 2> %t
|
||||
// RUN: FileCheck %s < %t
|
||||
struct X {
|
||||
int wibble;
|
||||
};
|
||||
|
||||
#define MACRO(X) X
|
||||
|
||||
void f(struct X *x) {
|
||||
// CHECK: error: no member named 'wobble' in 'struct X'; did you mean 'wibble'?
|
||||
// CHECK-NOT: FIX-IT
|
||||
// CHECK: note: 'wibble' declared here
|
||||
MACRO(x->wobble = 17);
|
||||
// CHECK: error: no member named 'wabble' in 'struct X'; did you mean 'wibble'?
|
||||
// CHECK: FIX-IT: Replace [17:6 - 17:12] with "wibble"
|
||||
// CHECK: note: 'wibble' declared here
|
||||
x->wabble = 17;
|
||||
}
|
|
@ -683,7 +683,7 @@ int perform_test_load_source(int argc, const char **argv,
|
|||
Idx = clang_createIndex(/* excludeDeclsFromPCH */
|
||||
(!strcmp(filter, "local") ||
|
||||
!strcmp(filter, "local-display"))? 1 : 0,
|
||||
/* displayDiagnosics=*/1);
|
||||
/* displayDiagnosics=*/0);
|
||||
|
||||
if (parse_remapped_files(argc, argv, 0, &unsaved_files, &num_unsaved_files)) {
|
||||
clang_disposeIndex(Idx);
|
||||
|
|
Loading…
Reference in New Issue