Timm =?utf-8?q?Bäder?= <tbae...@redhat.com>,"A. Jiang" <d...@live.cn>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/129...@github.com>


https://github.com/frederick-vs-ja updated 
https://github.com/llvm/llvm-project/pull/129646

>From 54c3e72e2c3b507ecf8cd65c15b9e137ba7331c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com>
Date: Tue, 4 Mar 2025 06:29:31 +0100
Subject: [PATCH 1/3] [clang] Alloc constexpr-unknown values pre C++23

Let's check the CI.
---
 clang/lib/AST/ExprConstant.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 6ccb6e23f8d2f..9ea42b308f42c 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -3470,8 +3470,7 @@ static bool evaluateVarDeclInit(EvalInfo &Info, const 
Expr *E,
                                 unsigned Version, APValue *&Result) {
   // C++23 [expr.const]p8 If we have a reference type allow unknown references
   // and pointers.
-  bool AllowConstexprUnknown =
-      Info.getLangOpts().CPlusPlus23 && VD->getType()->isReferenceType();
+  bool AllowConstexprUnknown = VD->getType()->isReferenceType();
 
   APValue::LValueBase Base(VD, Frame ? Frame->Index : 0, Version);
 
@@ -8893,8 +8892,7 @@ bool LValueExprEvaluator::VisitDeclRefExpr(const 
DeclRefExpr *E) {
 bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {
   // C++23 [expr.const]p8 If we have a reference type allow unknown references
   // and pointers.
-  bool AllowConstexprUnknown =
-      Info.getLangOpts().CPlusPlus23 && VD->getType()->isReferenceType();
+  bool AllowConstexprUnknown = VD->getType()->isReferenceType();
   // If we are within a lambda's call operator, check whether the 'VD' referred
   // to within 'E' actually represents a lambda-capture that maps to a
   // data-member/field within the closure object, and if so, evaluate to the

>From caed48e3648e3be46e63587c522f14d6e6559665 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com>
Date: Tue, 4 Mar 2025 07:57:45 +0100
Subject: [PATCH 2/3] allow in c++11 and later

---
 clang/lib/AST/ExprConstant.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 9ea42b308f42c..06fd018677d41 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -3470,7 +3470,8 @@ static bool evaluateVarDeclInit(EvalInfo &Info, const 
Expr *E,
                                 unsigned Version, APValue *&Result) {
   // C++23 [expr.const]p8 If we have a reference type allow unknown references
   // and pointers.
-  bool AllowConstexprUnknown = VD->getType()->isReferenceType();
+  bool AllowConstexprUnknown =
+      Info.getLangOpts().CPlusPlus11 && VD->getType()->isReferenceType();
 
   APValue::LValueBase Base(VD, Frame ? Frame->Index : 0, Version);
 
@@ -8892,7 +8893,8 @@ bool LValueExprEvaluator::VisitDeclRefExpr(const 
DeclRefExpr *E) {
 bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {
   // C++23 [expr.const]p8 If we have a reference type allow unknown references
   // and pointers.
-  bool AllowConstexprUnknown = VD->getType()->isReferenceType();
+  bool AllowConstexprUnknown =
+      Info.getLangOpts().CPlusPlus11 && VD->getType()->isReferenceType();
   // If we are within a lambda's call operator, check whether the 'VD' referred
   // to within 'E' actually represents a lambda-capture that maps to a
   // data-member/field within the closure object, and if so, evaluate to the

>From 66fb237f90e5e36d055556fd439d4d4521304a8e Mon Sep 17 00:00:00 2001
From: "A. Jiang" <d...@live.cn>
Date: Fri, 5 Sep 2025 19:52:10 +0800
Subject: [PATCH 3/3] Correspondingly update expected diagnostic messages

Except for the regressed one for `constexpr int &n = n;`.
---
 clang-tools-extra/clangd/unittests/HoverTests.cpp  |  1 +
 clang/test/AST/ByteCode/builtin-functions.cpp      |  2 +-
 clang/test/AST/ByteCode/cxx11.cpp                  |  4 ++--
 clang/test/AST/ByteCode/openmp.cpp                 |  2 +-
 clang/test/CXX/expr/expr.const/p2-0x.cpp           |  4 ++--
 .../expr.prim/expr.prim.req/simple-requirement.cpp |  3 +--
 ...stribute_parallel_for_simd_aligned_messages.cpp |  2 +-
 .../OpenMP/distribute_simd_aligned_messages.cpp    |  2 +-
 clang/test/OpenMP/for_simd_aligned_messages.cpp    |  2 +-
 .../masked_taskloop_simd_aligned_messages.cpp      |  2 +-
 .../master_taskloop_simd_aligned_messages.cpp      |  2 +-
 .../OpenMP/parallel_for_simd_aligned_messages.cpp  |  2 +-
 ...allel_masked_taskloop_simd_aligned_messages.cpp |  2 +-
 ...allel_master_taskloop_simd_aligned_messages.cpp |  2 +-
 clang/test/OpenMP/simd_aligned_messages.cpp        |  2 +-
 .../target_parallel_for_simd_aligned_messages.cpp  |  2 +-
 clang/test/OpenMP/target_simd_aligned_messages.cpp |  2 +-
 ...stribute_parallel_for_simd_aligned_messages.cpp |  2 +-
 ...rget_teams_distribute_simd_aligned_messages.cpp |  2 +-
 .../test/OpenMP/taskloop_simd_aligned_messages.cpp |  2 +-
 ...stribute_parallel_for_simd_aligned_messages.cpp |  2 +-
 .../teams_distribute_simd_aligned_messages.cpp     |  2 +-
 clang/test/SemaCXX/constant-expression-cxx11.cpp   | 14 +++++++-------
 clang/test/SemaCXX/constexpr-string.cpp            |  2 +-
 24 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp 
b/clang-tools-extra/clangd/unittests/HoverTests.cpp
index 743c0dc0d0187..666f8f6df8b4f 100644
--- a/clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -346,6 +346,7 @@ class Foo final {})cpp";
              {{"int"}, std::string("T"), std::nullopt},
              {{"bool"}, std::string("B"), std::nullopt},
          };
+         HI.Value = "false";
          return HI;
        }},
       // Lambda parameter with decltype
diff --git a/clang/test/AST/ByteCode/builtin-functions.cpp 
b/clang/test/AST/ByteCode/builtin-functions.cpp
index f47bc49d9a1a8..6c08493afe90d 100644
--- a/clang/test/AST/ByteCode/builtin-functions.cpp
+++ b/clang/test/AST/ByteCode/builtin-functions.cpp
@@ -1398,7 +1398,7 @@ namespace BuiltinMemcpy {
                                                                                
                     // both-note {{destination of 'memcpy' is (void *)123}}
 
 
-  constexpr float type_pun(const unsigned &n) {
+  constexpr float type_pun(const unsigned &n) { // expected-error {{constexpr 
function never produces a constant expression}}
     float f = 0.0f;
     __builtin_memcpy(&f, &n, 4); // both-note {{cannot constant evaluate 
'memcpy' from object of type 'const unsigned int' to object of type 'float'}}
     return f;
diff --git a/clang/test/AST/ByteCode/cxx11.cpp 
b/clang/test/AST/ByteCode/cxx11.cpp
index 72bc7622eb6d8..7c7549cd9fb03 100644
--- a/clang/test/AST/ByteCode/cxx11.cpp
+++ b/clang/test/AST/ByteCode/cxx11.cpp
@@ -210,7 +210,7 @@ namespace GlobalInitializer {
   extern int &g; // both-note {{here}}
   struct S {
     int G : g; // both-error {{constant expression}} \
-               // both-note {{initializer of 'g' is unknown}}
+               // both-note {{read of non-constexpr variable 'g' is not 
allowed in a constant expression}}
   };
 }
 
@@ -246,7 +246,7 @@ namespace IntToPtrCast {
 }
 
 namespace Volatile {
-  constexpr int f(volatile int &&r) {
+  constexpr int f(volatile int &&r) { // expected-error {{constexpr function 
never produces a constant expression}}
     return r; // both-note {{read of volatile-qualified type 'volatile int'}}
   }
   struct S {
diff --git a/clang/test/AST/ByteCode/openmp.cpp 
b/clang/test/AST/ByteCode/openmp.cpp
index 15f10a2cd262c..8179276657932 100644
--- a/clang/test/AST/ByteCode/openmp.cpp
+++ b/clang/test/AST/ByteCode/openmp.cpp
@@ -5,7 +5,7 @@ int test1() {
   int i;
   int &j = i; // both-note {{declared here}}
   float *f;
-  // both-note@+2 {{initializer of 'j' is not a constant expression}}
+  // both-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // both-error@+1 {{integral constant expression}}
   #pragma omp for simd aligned(f:j)
   for (int i = 0; i < 10; ++i);
diff --git a/clang/test/CXX/expr/expr.const/p2-0x.cpp 
b/clang/test/CXX/expr/expr.const/p2-0x.cpp
index 8401d3033eda9..bc5887ddb1c7f 100644
--- a/clang/test/CXX/expr/expr.const/p2-0x.cpp
+++ b/clang/test/CXX/expr/expr.const/p2-0x.cpp
@@ -411,9 +411,9 @@ namespace References {
     int D2 : &d - &c + 1;
     int E : e / 2;
     int F : f - 11;
-    int G : g; // expected-error {{constant expression}} expected-note 
{{initializer of 'g' is unknown}}
+    int G : g; // expected-error {{constant expression}} expected-note {{read 
of non-constexpr variable 'g' is not allowed in a constant expression}}
     int H : h(); // expected-error {{constant expression}} expected-note 
{{undefined function 'h'}}
-    int I : i; // expected-error {{constant expression}} expected-note 
{{initializer of 'i' is not a constant expression}}
+    int I : i; // expected-error {{constant expression}} expected-note {{read 
of non-constexpr variable 'i' is not allowed in a constant expression}}
     int J : j();
     int K : k;
   };
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp 
b/clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp
index 5199708cd8166..a8925deca890b 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp
@@ -104,8 +104,7 @@ class X { virtual ~X(); };
 constexpr bool b = requires (X &x) { static_cast<int(*)[(typeid(x), 
0)]>(nullptr); };
 // expected-warning@-1 {{left operand of comma operator has no effect}}
 // expected-warning@-2 {{variable length arrays in C++ are a Clang extension}}
-// expected-note@-3{{function parameter 'x' with unknown value cannot be used 
in a constant expression}}
-// expected-note@-4{{declared here}}
+// expected-note@-3{{typeid applied to object 'x' whose dynamic type is not 
constant}}
 
 namespace access_checks {
 namespace in_requires_expression {
diff --git 
a/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp 
b/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
index 960177cf7dda7..c6dab16dc05bc 100644
--- a/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/distribute_parallel_for_simd_aligned_messages.cpp
@@ -221,7 +221,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
 
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute parallel for simd aligned(f:j) // expected-note 
{{initializer of 'j' is not a constant expression}} expected-error {{integral 
constant expression}}
+#pragma omp distribute parallel for simd aligned(f:j) // expected-note {{read 
of non-constexpr variable 'j' is not allowed in a constant expression}} 
expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git a/clang/test/OpenMP/distribute_simd_aligned_messages.cpp 
b/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
index 6f1dd7d2552d9..65cbb0d39058d 100644
--- a/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/distribute_simd_aligned_messages.cpp
@@ -221,7 +221,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
 
 #pragma omp target
 #pragma omp teams
-#pragma omp distribute simd aligned(f:j) // expected-note {{initializer of 'j' 
is not a constant expression}} expected-error {{integral constant expression}}
+#pragma omp distribute simd aligned(f:j) // expected-note {{read of 
non-constexpr variable 'j' is not allowed in a constant expression}} 
expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git a/clang/test/OpenMP/for_simd_aligned_messages.cpp 
b/clang/test/OpenMP/for_simd_aligned_messages.cpp
index e925d00139f91..72e949e67a11c 100644
--- a/clang/test/OpenMP/for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/for_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp for simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp for simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/masked_taskloop_simd_aligned_messages.cpp 
b/clang/test/OpenMP/masked_taskloop_simd_aligned_messages.cpp
index 8c0ae171fa401..a9d4c35ae26f3 100644
--- a/clang/test/OpenMP/masked_taskloop_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/masked_taskloop_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp masked taskloop simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp masked taskloop simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/master_taskloop_simd_aligned_messages.cpp 
b/clang/test/OpenMP/master_taskloop_simd_aligned_messages.cpp
index c2c56dfdb458e..769281e5796b0 100644
--- a/clang/test/OpenMP/master_taskloop_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/master_taskloop_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp master taskloop simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp master taskloop simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/parallel_for_simd_aligned_messages.cpp 
b/clang/test/OpenMP/parallel_for_simd_aligned_messages.cpp
index e9ef234def244..9079676524c12 100644
--- a/clang/test/OpenMP/parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/parallel_for_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp parallel for simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp parallel for simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git 
a/clang/test/OpenMP/parallel_masked_taskloop_simd_aligned_messages.cpp 
b/clang/test/OpenMP/parallel_masked_taskloop_simd_aligned_messages.cpp
index 2cd13d65c8600..615b653786493 100644
--- a/clang/test/OpenMP/parallel_masked_taskloop_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/parallel_masked_taskloop_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp parallel masked taskloop simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp parallel masked taskloop simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git 
a/clang/test/OpenMP/parallel_master_taskloop_simd_aligned_messages.cpp 
b/clang/test/OpenMP/parallel_master_taskloop_simd_aligned_messages.cpp
index c6a5f6b90d3a6..14c91f8b15c03 100644
--- a/clang/test/OpenMP/parallel_master_taskloop_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/parallel_master_taskloop_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp parallel master taskloop simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp parallel master taskloop simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/simd_aligned_messages.cpp 
b/clang/test/OpenMP/simd_aligned_messages.cpp
index f34eabd37e452..d2495c6e29a4f 100644
--- a/clang/test/OpenMP/simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/simd_aligned_messages.cpp
@@ -152,7 +152,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/target_parallel_for_simd_aligned_messages.cpp 
b/clang/test/OpenMP/target_parallel_for_simd_aligned_messages.cpp
index c635663431f6c..81ff62c5f4b16 100644
--- a/clang/test/OpenMP/target_parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_for_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp target parallel for simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp target parallel for simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git a/clang/test/OpenMP/target_simd_aligned_messages.cpp 
b/clang/test/OpenMP/target_simd_aligned_messages.cpp
index e3b9ec47fba01..60504825349ed 100644
--- a/clang/test/OpenMP/target_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/target_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp target simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp target simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git 
a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_aligned_messages.cpp
 
b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_aligned_messages.cpp
index 40041bebced95..6b2d530448790 100644
--- 
a/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_aligned_messages.cpp
+++ 
b/clang/test/OpenMP/target_teams_distribute_parallel_for_simd_aligned_messages.cpp
@@ -167,7 +167,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
 
   int v = 0;
 
-#pragma omp target teams distribute parallel for simd aligned(f:j) // 
expected-note {{initializer of 'j' is not a constant expression}} 
expected-error {{integral constant expression}}
+#pragma omp target teams distribute parallel for simd aligned(f:j) // 
expected-note {{read of non-constexpr variable 'j' is not allowed in a constant 
expression}} expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git 
a/clang/test/OpenMP/target_teams_distribute_simd_aligned_messages.cpp 
b/clang/test/OpenMP/target_teams_distribute_simd_aligned_messages.cpp
index 8f634db9aff0c..a647319e490aa 100644
--- a/clang/test/OpenMP/target_teams_distribute_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/target_teams_distribute_simd_aligned_messages.cpp
@@ -167,7 +167,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
 
   int v = 0;
 
-#pragma omp target teams distribute simd aligned(f:j) // expected-note 
{{initializer of 'j' is not a constant expression}} expected-error {{integral 
constant expression}}
+#pragma omp target teams distribute simd aligned(f:j) // expected-note {{read 
of non-constexpr variable 'j' is not allowed in a constant expression}} 
expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git a/clang/test/OpenMP/taskloop_simd_aligned_messages.cpp 
b/clang/test/OpenMP/taskloop_simd_aligned_messages.cpp
index aa3331a0e249f..5edbb7f3b99a2 100644
--- a/clang/test/OpenMP/taskloop_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/taskloop_simd_aligned_messages.cpp
@@ -150,7 +150,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   #pragma omp taskloop simd aligned(f)
   for (I k = 0; k < argc; ++k) ++k;
   int v = 0;
-  // expected-note@+2 {{initializer of 'j' is not a constant expression}}
+  // expected-note@+2 {{read of non-constexpr variable 'j' is not allowed in a 
constant expression}}
   // expected-error@+1 {{integral constant expression}}
   #pragma omp taskloop simd aligned(f:j)
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
diff --git 
a/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp 
b/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
index 5c331e34382a1..6e87d037a7e7b 100644
--- a/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_parallel_for_simd_aligned_messages.cpp
@@ -195,7 +195,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   int v = 0;
 
 #pragma omp target
-#pragma omp teams distribute parallel for simd aligned(f:j) // expected-note 
{{initializer of 'j' is not a constant expression}} expected-error {{integral 
constant expression}}
+#pragma omp teams distribute parallel for simd aligned(f:j) // expected-note 
{{read of non-constexpr variable 'j' is not allowed in a constant expression}} 
expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git a/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp 
b/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
index 7fa78b5735ac4..3d53a0da9f10c 100644
--- a/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
+++ b/clang/test/OpenMP/teams_distribute_simd_aligned_messages.cpp
@@ -196,7 +196,7 @@ template<class I, class C> int foomain(I argc, C **argv) {
   int v = 0;
 
 #pragma omp target
-#pragma omp teams distribute simd aligned(f:j) // expected-note {{initializer 
of 'j' is not a constant expression}} expected-error {{integral constant 
expression}}
+#pragma omp teams distribute simd aligned(f:j) // expected-note {{read of 
non-constexpr variable 'j' is not allowed in a constant expression}} 
expected-error {{integral constant expression}}
 
   for (I k = 0; k < argc; ++k) { ++k; v += j; }
 
diff --git a/clang/test/SemaCXX/constant-expression-cxx11.cpp 
b/clang/test/SemaCXX/constant-expression-cxx11.cpp
index 91c4ff1cb520d..a3b1b988eef71 100644
--- a/clang/test/SemaCXX/constant-expression-cxx11.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx11.cpp
@@ -1354,7 +1354,7 @@ constexpr int m2b = const_cast<const int&>(n2); // 
expected-error {{constant exp
 struct T { int n; };
 const T t = { 42 }; // expected-note {{declared here}}
 
-constexpr int f(volatile int &&r) {
+constexpr int f(volatile int &&r) { // cxx11_20-error {{constexpr function 
never produces a constant expression}}
   return r; // expected-note {{read of volatile-qualified type 'volatile int'}}
 }
 constexpr int g(volatile int &&r) {
@@ -1475,9 +1475,9 @@ namespace ConvertedConstantExpr {
   // useless note and instead just point to the non-constant subexpression.
   enum class E {
     em = m,
-    en = n, // expected-error {{enumerator value is not a constant 
expression}} cxx11_20-note {{initializer of 'n' is unknown}} cxx23-note {{read 
of non-constexpr variable 'n'}}
+    en = n, // expected-error {{enumerator value is not a constant 
expression}} expected-note {{read of non-constexpr variable 'n'}}
     eo = (m + // expected-error {{not a constant expression}}
-          n // cxx11_20-note {{initializer of 'n' is unknown}} cxx23-note 
{{read of non-constexpr variable 'n'}}
+          n // expected-note {{read of non-constexpr variable 'n'}}
           ),
     eq = reinterpret_cast<long>((int*)0) // expected-error {{not a constant 
expression}} expected-note {{reinterpret_cast}}
   };
@@ -2435,15 +2435,15 @@ namespace array_size {
   template<typename T> void f1(T t) {
     constexpr int k = t.size();
   }
-  template<typename T> void f2(const T &t) { // cxx11_20-note 2{{declared 
here}}
-    constexpr int k = t.size();  // cxx11_20-error 2{{constexpr variable 'k' 
must be initialized by a constant expression}} cxx11_20-note 2{{function 
parameter 't' with unknown value cannot be used in a constant expression}}
+  template<typename T> void f2(const T &t) {
+    constexpr int k = t.size();
   }
   template<typename T> void f3(const T &t) {
     constexpr int k = T::size();
   }
   void g(array<3> a) {
     f1(a);
-    f2(a); // cxx11_20-note {{in instantiation of function template}}
+    f2(a);
     f3(a);
   }
 
@@ -2452,7 +2452,7 @@ namespace array_size {
   };
   void h(array_nonstatic<3> a) {
     f1(a);
-    f2(a); // cxx11_20-note {{instantiation of}}
+    f2(a);
   }
   //static_assert(f2(array_size::array<3>{}));
 }
diff --git a/clang/test/SemaCXX/constexpr-string.cpp 
b/clang/test/SemaCXX/constexpr-string.cpp
index c456740ef7551..fed4034e96155 100644
--- a/clang/test/SemaCXX/constexpr-string.cpp
+++ b/clang/test/SemaCXX/constexpr-string.cpp
@@ -615,7 +615,7 @@ namespace MemcpyEtc {
   static_assert(test_nontrivial_memmove()); // expected-error {{constant}} 
expected-note {{in call}}
 
   // Type puns via constant evaluated memcpy are not supported yet.
-  constexpr float type_pun(const unsigned &n) {
+  constexpr float type_pun(const unsigned &n) { // expected-error {{constexpr 
function never produces a constant expression}}
     float f = 0.0f;
     __builtin_memcpy(&f, &n, 4); // expected-note {{cannot constant evaluate 
'memcpy' from object of type 'const unsigned int' to object of type 'float'}}
     return f;

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

Reply via email to