llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Vincent (Mr-Anyone)

<details>
<summary>Changes</summary>

fixes #<!-- -->152477

---
Full diff: https://github.com/llvm/llvm-project/pull/152839.diff


3 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (+2) 
- (modified) clang/lib/Analysis/ReachableCode.cpp (+5) 
- (modified) clang/test/SemaCXX/warn-unreachable.cpp (+13) 


``````````diff
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..c7de8836932a3 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();
+    }
+};

``````````

</details>


https://github.com/llvm/llvm-project/pull/152839
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to