balazske created this revision. Herald added subscribers: martong, gamesh411, Szelethus, dkrupp. Herald added a reviewer: Szelethus. balazske requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Displaying the problem range could crash if the begin and end of a range is in different files or macros. After the change such range is displayed only as the beginning location. There is a bug for this problem: https://bugs.llvm.org/show_bug.cgi?id=46540 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D95860 Files: clang/lib/Frontend/DiagnosticRenderer.cpp clang/test/Analysis/crash-diagnostic-renderer.cpp Index: clang/test/Analysis/crash-diagnostic-renderer.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/crash-diagnostic-renderer.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s + +// This case reproduces a problem that is shown here: +// https://bugs.llvm.org/show_bug.cgi?id=46540 +// No assertion should happen in this case. + +// expected-error@13{{'b' does not refer to a type name in pseudo-destructor expression; expected the name of type 'volatile long'}} +// expected-error@13{{expected ')'}} +// expected-note@13{{to match this '('}} +// expected-error@13{{reference to pseudo-destructor must be called; did you mean to call it with no arguments?}} +// expected-error@13{{cannot initialize a variable of type 'volatile long' with an rvalue of type 'void'}} +// expected-error@13{{expected ';' after top level declarator}} +volatile long a ( a .~b Index: clang/lib/Frontend/DiagnosticRenderer.cpp =================================================================== --- clang/lib/Frontend/DiagnosticRenderer.cpp +++ clang/lib/Frontend/DiagnosticRenderer.cpp @@ -394,6 +394,9 @@ } } + if (Begin.isInvalid() || End.isInvalid() || BeginFileID != EndFileID) + continue; + // Do the backtracking. SmallVector<FileID, 4> CommonArgExpansions; computeCommonMacroArgExpansionFileIDs(Begin, End, SM, CommonArgExpansions);
Index: clang/test/Analysis/crash-diagnostic-renderer.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/crash-diagnostic-renderer.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s + +// This case reproduces a problem that is shown here: +// https://bugs.llvm.org/show_bug.cgi?id=46540 +// No assertion should happen in this case. + +// expected-error@13{{'b' does not refer to a type name in pseudo-destructor expression; expected the name of type 'volatile long'}} +// expected-error@13{{expected ')'}} +// expected-note@13{{to match this '('}} +// expected-error@13{{reference to pseudo-destructor must be called; did you mean to call it with no arguments?}} +// expected-error@13{{cannot initialize a variable of type 'volatile long' with an rvalue of type 'void'}} +// expected-error@13{{expected ';' after top level declarator}} +volatile long a ( a .~b Index: clang/lib/Frontend/DiagnosticRenderer.cpp =================================================================== --- clang/lib/Frontend/DiagnosticRenderer.cpp +++ clang/lib/Frontend/DiagnosticRenderer.cpp @@ -394,6 +394,9 @@ } } + if (Begin.isInvalid() || End.isInvalid() || BeginFileID != EndFileID) + continue; + // Do the backtracking. SmallVector<FileID, 4> CommonArgExpansions; computeCommonMacroArgExpansionFileIDs(Begin, End, SM, CommonArgExpansions);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits