[clang] [clang][bytecode] Reject final ltor casts on string literals (PR #156669)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 3 06:29:52 PDT 2025
https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/156669
Similar to what the current interpreter does.
>From eb54cccb34382534aa9689dca05562940daf0c94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Wed, 3 Sep 2025 15:28:23 +0200
Subject: [PATCH] [clang][bytecode] Reject final ltor casts on string literals
Similar to what the current interpreter does.
---
clang/lib/AST/ByteCode/EvalEmitter.cpp | 3 +++
clang/test/AST/ByteCode/openmp.cpp | 20 ++++++++++++++++++--
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/clang/lib/AST/ByteCode/EvalEmitter.cpp b/clang/lib/AST/ByteCode/EvalEmitter.cpp
index 2860a09ae6e2d..f15cb5ffa63b0 100644
--- a/clang/lib/AST/ByteCode/EvalEmitter.cpp
+++ b/clang/lib/AST/ByteCode/EvalEmitter.cpp
@@ -213,6 +213,9 @@ template <> bool EvalEmitter::emitRet<PT_Ptr>(const SourceInfo &Info) {
if (!Ptr.isZero() && !Ptr.isDereferencable())
return false;
+ if (Ptr.pointsToStringLiteral() && Ptr.isArrayRoot())
+ return false;
+
if (!Ptr.isZero() && !CheckFinalLoad(S, OpPC, Ptr))
return false;
diff --git a/clang/test/AST/ByteCode/openmp.cpp b/clang/test/AST/ByteCode/openmp.cpp
index e05fbe086625c..15f10a2cd262c 100644
--- a/clang/test/AST/ByteCode/openmp.cpp
+++ b/clang/test/AST/ByteCode/openmp.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=expected,both -fopenmp %s
-// RUN: %clang_cc1 -verify=ref,both -fopenmp %s
+// RUN: %clang_cc1 -verify=expected,both -fopenmp -fopenmp-version=60 %s -fexperimental-new-constant-interpreter
+// RUN: %clang_cc1 -verify=ref,both -fopenmp -fopenmp-version=60 %s
int test1() {
int i;
@@ -11,3 +11,19 @@ int test1() {
for (int i = 0; i < 10; ++i);
}
+extern int omp_get_thread_num(void);
+
+#define N 64
+
+int test2() {
+ int x = 0;
+ int device_result[N] = {0};
+
+ #pragma omp target parallel loop num_threads(strict: N) severity(warning) message("msg")
+ for (int i = 0; i < N; i++) {
+ x = omp_get_thread_num();
+ device_result[i] = i + x;
+ }
+}
+
+
More information about the cfe-commits
mailing list