================ @@ -268,6 +268,40 @@ void Sema::inferLifetimeBoundAttribute(FunctionDecl *FD) { } } +static bool IsPointerLikeType(QualType QT) { + QT = QT.getNonReferenceType(); + if (QT->isPointerType()) + return true; + auto *RD = QT->getAsCXXRecordDecl(); + if (!RD) + return false; + RD = RD->getCanonicalDecl(); + if (auto *CTSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) + RD = CTSD->getSpecializedTemplate()->getTemplatedDecl(); ---------------- hokein wrote:
hmm, this is strange. I tested it locally, it works for me. ``` $ cat /t/t6.cpp #include <vector> template<typename T> struct [[gsl::Pointer]] Span { Span(const std::vector<T> &V); }; void use() { Span<int> pp(std::vector<int>{}); std::vector<Span<int>> spans; spans.push_back(std::vector<int>()); // warning. } $ ./bin/clang -Xclang -fsyntax-only -Wdangling-capture /t/t6.cpp <<< /t/t6.cpp:9:16: warning: object backing the pointer will be destroyed at the end of the full-expression [-Wdangling-gsl] 9 | Span<int> pp(std::vector<int>{}); | ^~~~~~~~~~~~~~~~~~ /t/t6.cpp:11:19: warning: object whose reference is captured by 'spans' will be destroyed at the end of the full-expression [-Wdangling-capture] 11 | spans.push_back(std::vector<int>()); // warning. | ^~~~~~~~~~~~~~~~~~ 2 warnings generated. /usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x17): undefined reference to `main' clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` https://github.com/llvm/llvm-project/pull/117122 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits