llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Timm Baeder (tbaederr)

<details>
<summary>Changes</summary>

They are immutable, so diagnose accordingly.

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


2 Files Affected:

- (modified) clang/lib/AST/ByteCode/Interp.cpp (+8) 
- (modified) clang/test/AST/ByteCode/invalid.cpp (+14) 


``````````diff
diff --git a/clang/lib/AST/ByteCode/Interp.cpp 
b/clang/lib/AST/ByteCode/Interp.cpp
index 132c4ae92be41..08b78e2030f13 100644
--- a/clang/lib/AST/ByteCode/Interp.cpp
+++ b/clang/lib/AST/ByteCode/Interp.cpp
@@ -1957,6 +1957,14 @@ bool checkDestructor(InterpState &S, CodePtr OpPC, const 
Pointer &Ptr) {
   if (S.checkingConstantDestruction(Ptr))
     return true;
 
+  // String pointers are immutable, so can't call a destructor on them.
+  if (Ptr.isStringPointer()) {
+    S.FFDiag(S.Current->getSource(OpPC),
+             diag::note_constexpr_access_unreadable_object)
+        << AK_Destroy << Ptr.toDiagnosticString(S.getASTContext());
+    return false;
+  }
+
   // Can't call a dtor on a global variable.
   if (Ptr.isOpaquePointer() || Ptr.block()->isStatic()) {
     const SourceInfo &E = S.Current->getSource(OpPC);
diff --git a/clang/test/AST/ByteCode/invalid.cpp 
b/clang/test/AST/ByteCode/invalid.cpp
index 52c91f46ac16d..cf859eb75dd90 100644
--- a/clang/test/AST/ByteCode/invalid.cpp
+++ b/clang/test/AST/ByteCode/invalid.cpp
@@ -313,3 +313,17 @@ namespace UnsizedArrayAndNonEmptyPath {
 
   void bar() { foo(); }
 }
+
+namespace StringLiteralDtor {
+  template <typename T> constexpr void foo(T *t) {
+    t->~T(); // both-note {{destruction of object}}
+  }
+  constexpr bool bar() {
+    foo(&"baz"[0]); // both-note {{in call to}} \
+                    // ref-note {{temporary created here}}
+    return true;
+  }
+
+  static_assert(bar(), ""); // both-error {{not an integral constant 
expression}} \
+                            // both-note {{in call to}}
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/227283
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to