https://github.com/Mr-Anyone updated 
https://github.com/llvm/llvm-project/pull/152839

>From ee1bcce58317bd83934a3e9c895a77ed011cd4ca Mon Sep 17 00:00:00 2001
From: Vincent <l...@viceroygroup.ca>
Date: Sat, 9 Aug 2025 15:06:20 +0800
Subject: [PATCH] [clang] Forward Correct SourceLocation for Unreachable Code
 Diagnostics

fixes #152477
---
 clang/docs/ReleaseNotes.rst             |  2 ++
 clang/lib/Analysis/ReachableCode.cpp    |  5 +++++
 clang/test/SemaCXX/warn-unreachable.cpp | 13 +++++++++++++
 3 files changed, 20 insertions(+)

diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 17e3df467593d..f3b21479c7470 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -178,6 +178,8 @@ Bug Fixes to C++ Support
 - Diagnose binding a reference to ``*nullptr`` during constant evaluation. 
(#GH48665)
 - Suppress ``-Wdeprecated-declarations`` in implicitly generated functions. 
(#GH147293)
 - Fix a crash when deleting a pointer to an incomplete array (#GH150359).
+- Diagnosing the correct location for a function with non-POD data return-type 
being
+  labeled ``[[noreturn]]``.
 - Fix an assertion failure when expression in assumption attribute
   (``[[assume(expr)]]``) creates temporary objects.
 
diff --git a/clang/lib/Analysis/ReachableCode.cpp 
b/clang/lib/Analysis/ReachableCode.cpp
index 4a9ab5d9f0f73..9d52e5712025e 100644
--- a/clang/lib/Analysis/ReachableCode.cpp
+++ b/clang/lib/Analysis/ReachableCode.cpp
@@ -601,6 +601,11 @@ static SourceLocation GetUnreachableLoc(const Stmt *S,
     S = Ex->IgnoreParenImpCasts();
 
   switch (S->getStmtClass()) {
+  case Expr::CXXBindTemporaryExprClass: {
+    const CXXBindTemporaryExpr *TemporaryExpr = cast<CXXBindTemporaryExpr>(S);
+    R1 = TemporaryExpr->getTemporary()->getDestructor()->getSourceRange();
+    return R1.getBegin();
+  }
     case Expr::BinaryOperatorClass: {
       const BinaryOperator *BO = cast<BinaryOperator>(S);
       return BO->getOperatorLoc();
diff --git a/clang/test/SemaCXX/warn-unreachable.cpp 
b/clang/test/SemaCXX/warn-unreachable.cpp
index e6f5bc5ef8e12..ce574cfafa8e1 100644
--- a/clang/test/SemaCXX/warn-unreachable.cpp
+++ b/clang/test/SemaCXX/warn-unreachable.cpp
@@ -414,3 +414,16 @@ void tautological_compare(bool x, int y) {
     calledFun();
 
 }
+
+namespace GH152477{
+    class A{
+    public:
+        ~A(); // expected-warning {{will never be executed}}
+    };
+
+    [[noreturn]] A never_return_so_destructor_never_called();
+
+    void func(){
+        never_return_so_destructor_never_called();
+    }
+};

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to