diff options
author | Patrick Palka <ppalka@redhat.com> | 2023-02-28 15:05:30 -0500 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2023-02-28 15:05:30 -0500 |
commit | d3d205ab440886164b6de2be2a2efa10cac95b66 (patch) | |
tree | 5ed37246db4303d50f761537d738fc751b2c5e6f /libgomp/libgomp-plugin.c | |
parent | afe6cea4489846aa8585f3c045d16cdaa08cc6cd (diff) | |
download | gcc-d3d205ab440886164b6de2be2a2efa10cac95b66.zip gcc-d3d205ab440886164b6de2be2a2efa10cac95b66.tar.gz gcc-d3d205ab440886164b6de2be2a2efa10cac95b66.tar.bz2 |
c++: non-dependent variable template-id [PR108848]
Here we're treating deeming the non-dependent variable template-id
tag<int> as dependent ever since r226642 gave variable TEMPLATE_ID_EXPR
an empty type, which causes the call to finish_template_variable from
finish_id_expression_1 to be unreachable at template parse time. Thus
we're led into thinking tag<int>.var<void> refers to a dependent name.
This patch fixes this by making finish_id_expression_1 instantiate a
variable template-id as long as it's not dependent according to the
dependence test in lookup_and_finish_template_variable rather than
according to type_dependent_expression_p.
PR c++/108848
gcc/cp/ChangeLog:
* pt.cc (finish_template_variable): Move dependence check
to here from ...
(lookup_and_finish_template_variable): ... here.
* semantics.cc (finish_id_expression_1): Call
finish_template_variable sooner, before (and regardless of) the
type_dependent_expression_p test.
gcc/testsuite/ChangeLog:
* g++.dg/cpp1y/noexcept1.C: Don't expect a bogus "different
exception specifier" error. Expect a separate "not usable
in a constant expression" error.
* g++.dg/cpp1y/var-templ75.C: New test.
* g++.dg/cpp1y/var-templ76.C: New test.
Diffstat (limited to 'libgomp/libgomp-plugin.c')
0 files changed, 0 insertions, 0 deletions