diff options
author | Marek Polacek <polacek@redhat.com> | 2022-06-02 15:56:18 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2022-06-02 16:28:40 -0400 |
commit | 2423f6548405185e256036df3d0ef3c13fd996c5 (patch) | |
tree | bb63df71df5e1b06925f0a10b20a4461f92dd832 /gcc | |
parent | 7b98910406b5000a6429c188b0c6cc14e3140637 (diff) | |
download | gcc-2423f6548405185e256036df3d0ef3c13fd996c5.zip gcc-2423f6548405185e256036df3d0ef3c13fd996c5.tar.gz gcc-2423f6548405185e256036df3d0ef3c13fd996c5.tar.bz2 |
c++: new-expression is potentially constant in C++20
... so adjust p_c_e accordingly.
gcc/cp/ChangeLog:
* constexpr.cc (potential_constant_expression_1): Treat
{,VEC_}NEW_EXPR and {,VEC_}DELETE_EXPRas potentially constant in C++20.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/constexpr.cc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 1346a1d..6842388 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -9039,12 +9039,20 @@ potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now, "before C++17"); return false; - case DYNAMIC_CAST_EXPR: - case PSEUDO_DTOR_EXPR: case NEW_EXPR: case VEC_NEW_EXPR: case DELETE_EXPR: case VEC_DELETE_EXPR: + if (cxx_dialect >= cxx20) + /* In C++20, new-expressions are potentially constant. */ + return true; + else if (flags & tf_error) + error_at (loc, "new-expression is not a constant expression " + "before C++20"); + return false; + + case DYNAMIC_CAST_EXPR: + case PSEUDO_DTOR_EXPR: case THROW_EXPR: case OMP_PARALLEL: case OMP_TASK: |