diff options
author | Marek Polacek <polacek@redhat.com> | 2023-05-25 18:54:18 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2023-07-14 13:16:12 -0400 |
commit | b5138df96a93d3b5070c88b8617eabd38cb24ab6 (patch) | |
tree | 560c81e76de57095cfce4efd8154182f349697e5 /gcc/value-range.h | |
parent | 8911879415d6c2a7baad88235554a912887a1c5c (diff) | |
download | gcc-b5138df96a93d3b5070c88b8617eabd38cb24ab6.zip gcc-b5138df96a93d3b5070c88b8617eabd38cb24ab6.tar.gz gcc-b5138df96a93d3b5070c88b8617eabd38cb24ab6.tar.bz2 |
c++: wrong error with static constexpr var in tmpl [PR109876]
Since r8-509, we'll no longer create a static temporary var for
the initializer '{ 1, 2 }' for num in the attached test because
the code in finish_compound_literal is now guarded by
'&& fcl_context == fcl_c99' but it's fcl_functional here. This
causes us to reject num as non-constant when evaluating it in
a template.
Jason's idea was to treat num as value-dependent even though it
actually isn't. This patch implements that suggestion.
We weren't marking objects whose type is an empty class type
constant. This patch changes that so that v_d_e_p doesn't need
to check is_really_empty_class.
Co-authored-by: Jason Merrill <jason@redhat.com>
PR c++/109876
gcc/cp/ChangeLog:
* decl.cc (cp_finish_decl): Set TREE_CONSTANT when initializing
an object of empty class type.
* pt.cc (value_dependent_expression_p) <case VAR_DECL>: Treat a
constexpr-declared non-constant variable as value-dependent.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/constexpr-template12.C: New test.
* g++.dg/cpp1z/constexpr-template1.C: New test.
* g++.dg/cpp1z/constexpr-template2.C: New test.
Diffstat (limited to 'gcc/value-range.h')
0 files changed, 0 insertions, 0 deletions