aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-range.h
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2023-05-25 18:54:18 -0400
committerMarek Polacek <polacek@redhat.com>2023-07-14 13:16:12 -0400
commitb5138df96a93d3b5070c88b8617eabd38cb24ab6 (patch)
tree560c81e76de57095cfce4efd8154182f349697e5 /gcc/value-range.h
parent8911879415d6c2a7baad88235554a912887a1c5c (diff)
downloadgcc-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