Author: r.stahl Date: Wed Jul 4 07:12:58 2018 New Revision: 336275 URL: http://llvm.org/viewvc/llvm-project?rev=336275&view=rev Log: [analyzer][ctu] fix unsortable diagnostics
Summary: In the provided test case the PathDiagnostic compare function was not able to find a difference. Reviewers: xazax.hun, NoQ, dcoughlin, george.karpenkov Reviewed By: george.karpenkov Subscribers: a_sidorin, szepet, rnkovacs, a.sidorin, mikhail.ramalho, cfe-commits Differential Revision: https://reviews.llvm.org/D48474 Added: cfe/trunk/test/Analysis/ctu-hdr.h Modified: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp cfe/trunk/test/Analysis/Inputs/ctu-other.cpp cfe/trunk/test/Analysis/Inputs/externalFnMap.txt cfe/trunk/test/Analysis/ctu-main.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=336275&r1=336274&r2=336275&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp Wed Jul 4 07:12:58 2018 @@ -406,11 +406,15 @@ static bool compareCrossTUSourceLocs(Ful std::pair<bool, bool> InSameTU = SM.isInTheSameTranslationUnit(XOffs, YOffs); if (InSameTU.first) return XL.isBeforeInTranslationUnitThan(YL); - const FileEntry *XFE = SM.getFileEntryForID(XL.getFileID()); - const FileEntry *YFE = SM.getFileEntryForID(YL.getFileID()); + const FileEntry *XFE = SM.getFileEntryForID(XL.getSpellingLoc().getFileID()); + const FileEntry *YFE = SM.getFileEntryForID(YL.getSpellingLoc().getFileID()); if (!XFE || !YFE) return XFE && !YFE; - return XFE->getName() < YFE->getName(); + int NameCmp = XFE->getName().compare(YFE->getName()); + if (NameCmp != 0) + return NameCmp == -1; + // Last resort: Compare raw file IDs that are possibly expansions. + return XL.getFileID() < YL.getFileID(); } static bool compare(const PathDiagnostic &X, const PathDiagnostic &Y) { Modified: cfe/trunk/test/Analysis/Inputs/ctu-other.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/Inputs/ctu-other.cpp?rev=336275&r1=336274&r2=336275&view=diff ============================================================================== --- cfe/trunk/test/Analysis/Inputs/ctu-other.cpp (original) +++ cfe/trunk/test/Analysis/Inputs/ctu-other.cpp Wed Jul 4 07:12:58 2018 @@ -1,3 +1,5 @@ +#include "../ctu-hdr.h" + int callback_to_main(int x); int f(int x) { return x - 1; @@ -68,3 +70,8 @@ int chf1(int x) { typedef struct { int n; } Anonymous; int fun_using_anon_struct(int n) { Anonymous anon; anon.n = n; return anon.n; } + +int other_macro_diag(int x) { + MACRODIAG(); + return x; +} Modified: cfe/trunk/test/Analysis/Inputs/externalFnMap.txt URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/Inputs/externalFnMap.txt?rev=336275&r1=336274&r2=336275&view=diff ============================================================================== --- cfe/trunk/test/Analysis/Inputs/externalFnMap.txt (original) +++ cfe/trunk/test/Analysis/Inputs/externalFnMap.txt Wed Jul 4 07:12:58 2018 @@ -12,3 +12,4 @@ c:@F@h_chain#I# ctu-chain.cpp.ast c:@N@chns@S@chcls@F@chf4#I# ctu-chain.cpp.ast c:@N@chns@F@chf2#I# ctu-chain.cpp.ast c:@F@fun_using_anon_struct#I# ctu-other.cpp.ast +c:@F@other_macro_diag#I# ctu-other.cpp.ast Added: cfe/trunk/test/Analysis/ctu-hdr.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/ctu-hdr.h?rev=336275&view=auto ============================================================================== --- cfe/trunk/test/Analysis/ctu-hdr.h (added) +++ cfe/trunk/test/Analysis/ctu-hdr.h Wed Jul 4 07:12:58 2018 @@ -0,0 +1,3 @@ +#define MACRODIAG() clang_analyzer_warnIfReached() + +void clang_analyzer_warnIfReached(); Modified: cfe/trunk/test/Analysis/ctu-main.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/ctu-main.cpp?rev=336275&r1=336274&r2=336275&view=diff ============================================================================== --- cfe/trunk/test/Analysis/ctu-main.cpp (original) +++ cfe/trunk/test/Analysis/ctu-main.cpp Wed Jul 4 07:12:58 2018 @@ -4,6 +4,8 @@ // RUN: cp %S/Inputs/externalFnMap.txt %T/ctudir/ // RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-config experimental-enable-naive-ctu-analysis=true -analyzer-config ctu-dir=%T/ctudir -verify %s +#include "ctu-hdr.h" + void clang_analyzer_eval(int); int f(int); @@ -41,6 +43,7 @@ int chf1(int x); } int fun_using_anon_struct(int); +int other_macro_diag(int); int main() { clang_analyzer_eval(f(3) == 2); // expected-warning{{TRUE}} @@ -58,4 +61,8 @@ int main() { clang_analyzer_eval(chns::chf1(4) == 12); // expected-warning{{TRUE}} clang_analyzer_eval(fun_using_anon_struct(8) == 8); // expected-warning{{TRUE}} + + clang_analyzer_eval(other_macro_diag(1) == 1); // expected-warning{{TRUE}} + // expected-warning@Inputs/ctu-other.cpp:75{{REACHABLE}} + MACRODIAG(); // expected-warning{{REACHABLE}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits