c++: overeager type completion in convert_to_void [PR111419]
Here convert_to_void always completes the type of an indirection or id-expression, but according to [expr.context] an lvalue-to-rvalue conversion is applied to a discarded-value expression only if "the expression is a glvalue of volatile-qualified type". This patch restricts convert_to_void's type completion to match. PR c++/111419 gcc/cp/ChangeLog: * cvt.cc (convert_to_void) <case INDIRECT_REF>: Only call complete_type if the type is volatile. <case VAR_DECL>: Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-requires36.C: New test. * g++.dg/expr/discarded1.C: New test. * g++.dg/expr/discarded1a.C: New test.
Showing
- gcc/cp/cvt.cc 6 additions, 3 deletionsgcc/cp/cvt.cc
- gcc/testsuite/g++.dg/cpp2a/concepts-requires36.C 16 additions, 0 deletionsgcc/testsuite/g++.dg/cpp2a/concepts-requires36.C
- gcc/testsuite/g++.dg/expr/discarded1.C 15 additions, 0 deletionsgcc/testsuite/g++.dg/expr/discarded1.C
- gcc/testsuite/g++.dg/expr/discarded1a.C 17 additions, 0 deletionsgcc/testsuite/g++.dg/expr/discarded1a.C
Loading
Please register or sign in to comment