https://github.com/hokein updated https://github.com/llvm/llvm-project/pull/111753
>From 354b33432d0dafbf54667a9ee973f5b2712c5773 Mon Sep 17 00:00:00 2001 From: Haojian Wu <hokein...@gmail.com> Date: Wed, 9 Oct 2024 21:34:49 +0200 Subject: [PATCH 1/2] [clang] Diagnose the dangling references for vector. --- clang/lib/Sema/CheckExprLifetime.cpp | 2 +- clang/test/Sema/warn-lifetime-analysis-nocfg.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index 009b8d000e6b0e..8a44a131c02cb4 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -404,7 +404,7 @@ shouldTrackFirstArgumentForConstructor(const CXXConstructExpr *Ctor) { if (LHSRecordDecl->hasAttr<PointerAttr>()) return true; - if (Ctor->getConstructor()->getNumParams() != 1 || + if (Ctor->getConstructor()->getNumParams() < 1 || !isContainerOfPointer(LHSRecordDecl)) return false; diff --git a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp index 731639ab16a735..688f55edfe84df 100644 --- a/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp +++ b/clang/test/Sema/warn-lifetime-analysis-nocfg.cpp @@ -164,14 +164,16 @@ template<typename T> struct initializer_list { const T* ptr; size_t sz; }; -template <typename T> +template<typename T> class allocator {}; +template <typename T, typename Alloc = allocator<T>> struct vector { typedef __gnu_cxx::basic_iterator<T> iterator; iterator begin(); iterator end(); const T *data() const; vector(); - vector(initializer_list<T> __l); + vector(initializer_list<T> __l, + const Alloc& alloc = Alloc()); template<typename InputIterator> vector(InputIterator first, InputIterator __last); >From 239728a9f8d848c3f53c1e92e00db8c33528b6e8 Mon Sep 17 00:00:00 2001 From: Haojian Wu <hokein...@gmail.com> Date: Mon, 14 Oct 2024 20:47:26 +0200 Subject: [PATCH 2/2] Address review comment. --- clang/lib/Sema/CheckExprLifetime.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp index 8a44a131c02cb4..9b3894767d8629 100644 --- a/clang/lib/Sema/CheckExprLifetime.cpp +++ b/clang/lib/Sema/CheckExprLifetime.cpp @@ -404,7 +404,7 @@ shouldTrackFirstArgumentForConstructor(const CXXConstructExpr *Ctor) { if (LHSRecordDecl->hasAttr<PointerAttr>()) return true; - if (Ctor->getConstructor()->getNumParams() < 1 || + if (Ctor->getConstructor()->param_empty() || !isContainerOfPointer(LHSRecordDecl)) return false; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits