[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-11 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers closed 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Shafik Yaghmour via cfe-commits

shafik wrote:

LGTM, thank you for the quick fix!

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


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Erich Keane via cfe-commits

https://github.com/erichkeane approved this pull request.


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


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers edited 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread via cfe-commits

https://github.com/github-actions[bot] labeled 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers review_requested 
https://github.com/llvm/llvm-project/pull/65818
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang][VarDecl] Reset un-evaluated constant for all C++ modes (PR #65818)

2023-09-08 Thread Nick Desaulniers via cfe-commits

https://github.com/nickdesaulniers created 
https://github.com/llvm/llvm-project/pull/65818:

After commit 610ec954e1f8 ("[clang] allow const structs/unions/arrays to
be constant expressions for C"), attempts to evaluate
structs/unions/arrays as constants are also performed for C++98 and
C++03.

An assertion was getting tripped up since the potentially-partially
evaluated value was not being reset for those 2 language modes.  Make
sure to reset it now for all C++ modes.

Fixes: 65784


>From bed8af1a6dd2851542fbb92b72d799ccdd504eb4 Mon Sep 17 00:00:00 2001
From: Nick Desaulniers 
Date: Fri, 8 Sep 2023 15:30:51 -0700
Subject: [PATCH] [clang][VarDecl] Reset un-evaluated constant for all C++
 modes

After commit 610ec954e1f8 ("[clang] allow const structs/unions/arrays to
be constant expressions for C"), attempts to evaluate
structs/unions/arrays as constants are also performed for C++98 and
C++03.

An assertion was getting tripped up since the potentially-partially
evaluated value was not being reset for those 2 language modes.  Make
sure to reset it now for all C++ modes.

Fixes: 65784
---
 clang/lib/AST/Decl.cpp | 4 ++--
 clang/test/SemaCXX/constant-expression.cpp | 5 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 60c80f2b075336b..6109829cf20a678 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -2555,10 +2555,10 @@ APValue 
*VarDecl::evaluateValueImpl(SmallVectorImpl ,
   bool Result = Init->EvaluateAsInitializer(Eval->Evaluated, Ctx, this, Notes,
 IsConstantInitialization);
 
-  // In C++11, this isn't a constant initializer if we produced notes. In that
+  // In C++, this isn't a constant initializer if we produced notes. In that
   // case, we can't keep the result, because it may only be correct under the
   // assumption that the initializer is a constant context.
-  if (IsConstantInitialization && Ctx.getLangOpts().CPlusPlus11 &&
+  if (IsConstantInitialization && Ctx.getLangOpts().CPlusPlus &&
   !Notes.empty())
 Result = false;
 
diff --git a/clang/test/SemaCXX/constant-expression.cpp 
b/clang/test/SemaCXX/constant-expression.cpp
index 65c93c99002e1f0..cc041a4acd18cbb 100644
--- a/clang/test/SemaCXX/constant-expression.cpp
+++ b/clang/test/SemaCXX/constant-expression.cpp
@@ -153,3 +153,8 @@ namespace PR31701 {
 const C c = C::n;
   }
 }
+
+struct PR65784s{
+  int *ptr;
+} const PR65784[] = {(int *)""};
+PR65784s PR65784f() { return *PR65784; }

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