[Analyzer] Remove inclusion of uniqueing decl from diagnostic profile.

The uniqueing decl in PathDiagnostic is the declaration with the
uniqueing loc, as stated by documentation comments.
It is enough to include the uniqueing loc in the profile. It is possible
to have objects with different uniqueing decl but same location, at
least with templates. These belong to the same class and should have
same profile.

Reviewed By: vsavchenko, NoQ

Differential Revision: https://reviews.llvm.org/D84843
This commit is contained in:
Balázs Kéri 2020-07-30 08:36:05 +02:00
parent 23ad660b5d
commit 1745ba41b1
2 changed files with 16 additions and 1 deletions

View File

@ -1134,7 +1134,6 @@ void PathDiagnosticPopUpPiece::Profile(llvm::FoldingSetNodeID &ID) const {
void PathDiagnostic::Profile(llvm::FoldingSetNodeID &ID) const {
ID.Add(getLocation());
ID.Add(getUniqueingLoc());
ID.AddPointer(getUniqueingLoc().isValid() ? getUniqueingDecl() : nullptr);
ID.AddString(BugType);
ID.AddString(VerboseDesc);
ID.AddString(Category);

View File

@ -0,0 +1,16 @@
// RUN: %clang_analyze_cc1 -verify %s \
// RUN: -analyzer-checker=security
void bzero(void *, unsigned long);
template <typename T> void foo(T l) {
// The warning comes from multiple instances and with
// different declarations that have same source location.
// One instance should be shown.
bzero(l, 1); // expected-warning{{The bzero() function is obsoleted}}
}
void p(int *p, unsigned *q) {
foo(p);
foo(q);
}