[clang] dd6738d - [clang][Lifetimes] Fix false positive warning from BUG 49342
Gabor Horvath via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 27 08:16:02 PST 2021
Author: Gabor Horvath
Date: 2021-02-27T08:09:57-08:00
New Revision: dd6738d93de148f2239ef5be82a61cf8f5f71124
URL: https://github.com/llvm/llvm-project/commit/dd6738d93de148f2239ef5be82a61cf8f5f71124
DIFF: https://github.com/llvm/llvm-project/commit/dd6738d93de148f2239ef5be82a61cf8f5f71124.diff
LOG: [clang][Lifetimes] Fix false positive warning from BUG 49342
Differential Revision: https://reviews.llvm.org/D97605
Added:
Modified:
clang/lib/Sema/SemaInit.cpp
clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index c1a2be744853..f387e9a33708 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -7521,6 +7521,8 @@ static bool pathOnlyInitializesGslPointer(IndirectLocalPath &Path) {
continue;
if (It->Kind == IndirectLocalPathEntry::AddressOf)
continue;
+ if (It->Kind == IndirectLocalPathEntry::LifetimeBoundCall)
+ continue;
return It->Kind == IndirectLocalPathEntry::GslPointerInit ||
It->Kind == IndirectLocalPathEntry::GslReferenceInit;
}
diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
index 3319d5aa2db8..b3ca173c1fdb 100644
--- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
+++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp
@@ -171,12 +171,22 @@ struct basic_string_view {
const T *begin() const;
};
+template<class _Mystr> struct iter {
+ iter& operator-=(int);
+
+ iter operator-(int _Off) const {
+ iter _Tmp = *this;
+ return _Tmp -= _Off;
+ }
+};
+
template<typename T>
struct basic_string {
basic_string();
basic_string(const T *);
const T *c_str() const;
operator basic_string_view<T> () const;
+ using const_iterator = iter<T>;
};
@@ -455,3 +465,8 @@ std::vector<int>::iterator noFalsePositiveWithVectorOfPointers() {
std::vector<std::vector<int>::iterator> iters;
return iters.at(0);
}
+
+void testForBug49342()
+{
+ auto it = std::iter<char>{} - 2; // Used to be false positive.
+}
More information about the cfe-commits
mailing list