c++: double non-dep folding from finish_compound_literal [PR104565]
In finish_compound_literal, we perform non-dependent expr folding before the call to check_narrowing ever since r9-5973. But ever since r10-7096, check_narrowing also performs non-dependent expr folding of its own. This double folding means tsubst will see non-templated trees during the second folding, which causes a spurious error in the below testcase. This patch removes the former folding operation; it seems obviated by the latter one. PR c++/104565 gcc/cp/ChangeLog: * semantics.cc (finish_compound_literal): Don't perform non-dependent expr folding before calling check_narrowing. gcc/testsuite/ChangeLog: * g++.dg/template/non-dependent22.C: New test.
This commit is contained in:
parent
754dce903c
commit
6bbd8afee0
2 changed files with 15 additions and 7 deletions
|
@ -3203,13 +3203,9 @@ finish_compound_literal (tree type, tree compound_literal,
|
|||
return error_mark_node;
|
||||
compound_literal = reshape_init (type, compound_literal, complain);
|
||||
if (SCALAR_TYPE_P (type)
|
||||
&& !BRACE_ENCLOSED_INITIALIZER_P (compound_literal))
|
||||
{
|
||||
tree t = instantiate_non_dependent_expr_sfinae (compound_literal,
|
||||
complain);
|
||||
if (!check_narrowing (type, t, complain))
|
||||
return error_mark_node;
|
||||
}
|
||||
&& !BRACE_ENCLOSED_INITIALIZER_P (compound_literal)
|
||||
&& !check_narrowing (type, compound_literal, complain))
|
||||
return error_mark_node;
|
||||
if (TREE_CODE (type) == ARRAY_TYPE
|
||||
&& TYPE_DOMAIN (type) == NULL_TREE)
|
||||
{
|
||||
|
|
12
gcc/testsuite/g++.dg/template/non-dependent22.C
Normal file
12
gcc/testsuite/g++.dg/template/non-dependent22.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// PR c++/104565
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
struct apa {
|
||||
constexpr int n() const { return 3; }
|
||||
};
|
||||
|
||||
template<class>
|
||||
int f() {
|
||||
apa foo;
|
||||
return int{foo.n()}; // no matching function for call to 'apa::n(apa*)'
|
||||
}
|
Loading…
Add table
Reference in a new issue