* [Bug c++/83529] ICE in canonical types differ for identical types
[not found] <bug-83529-4@http.gcc.gnu.org/bugzilla/>
2021-04-02 14:38 ` [Bug c++/83529] ICE in canonical types differ for identical types ppalka at gcc dot gnu.org
@ 2024-06-10 17:22 ` mpolacek at gcc dot gnu.org
1 sibling, 0 replies; 2+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-06-10 17:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83529
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |mpolacek at gcc dot gnu.org
--- Comment #10 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Comment 7 now ICEs in a different spot. This started with r13-4761:
commit 982629bea416df976686467f235e09cb1a5531cc
Author: Patrick Palka <ppalka@redhat.com>
Date: Sat Dec 17 11:24:44 2022 -0500
c++: constantness of non-dependent NTTP argument [PR107437]
$ xg++ -c 83529-2.C
83529-2.C:5:26: error: call to non-‘constexpr’ function ‘int Foo(void*)’
5 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
83529-2.C:1:5: note: ‘int Foo(void*)’ declared here
1 | int Foo (void *);
| ^~~
83529-2.C:5:26: error: invalid conversion from ‘int’ to ‘void*’ [-fpermissive]
5 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
| |
| int
83529-2.C:1:10: note: initializing argument 1 of ‘int Foo(void*)’
1 | int Foo (void *);
| ^~~~~~
83529-2.C:5:26: error: call to non-‘constexpr’ function ‘int Foo(void*)’
5 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
83529-2.C:1:5: note: ‘int Foo(void*)’ declared here
1 | int Foo (void *);
| ^~~
83529-2.C:5:26: note: in template argument for type ‘int’
5 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
83529-2.C:9:26: error: call to non-‘constexpr’ function ‘int Foo(float)’
9 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
83529-2.C:7:5: note: ‘int Foo(float)’ declared here
7 | int Foo (float);
| ^~~
83529-2.C:9:26: internal compiler error: unexpected expression ‘I’ of kind
template_parm_index
9 | template <int I> TPL<Foo (I)> Baz ();
| ~~~~^~~
0xe42ac2 cxx_eval_constant_expression
/home/mpolacek/src/gcc/gcc/cp/constexpr.cc:8597
0xe446a1 cxx_eval_outermost_constant_expr
/home/mpolacek/src/gcc/gcc/cp/constexpr.cc:8852
0xe458d7 maybe_constant_value(tree_node*, tree_node*, mce_value)
/home/mpolacek/src/gcc/gcc/cp/constexpr.cc:9161
0xe8ec41 cp_fully_fold
/home/mpolacek/src/gcc/gcc/cp/cp-gimplify.cc:2852
0xe8edb0 cp_fully_fold(tree_node*)
/home/mpolacek/src/gcc/gcc/cp/cp-gimplify.cc:2871
0xe9e344 cp_convert_and_check(tree_node*, tree_node*, int)
/home/mpolacek/src/gcc/gcc/cp/cvt.cc:668
0xdc6bff convert_like_internal
/home/mpolacek/src/gcc/gcc/cp/call.cc:9022
0xdc6ec8 convert_like
/home/mpolacek/src/gcc/gcc/cp/call.cc:9081
0xdc6f83 convert_like_with_context
/home/mpolacek/src/gcc/gcc/cp/call.cc:9105
0xdca2f0 operator()
/home/mpolacek/src/gcc/gcc/cp/call.cc:10232
0xdcc20b build_over_call
/home/mpolacek/src/gcc/gcc/cp/call.cc:10289
0xdb79d2 build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
/home/mpolacek/src/gcc/gcc/cp/call.cc:5123
0x11a5c16 finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**,
bool, bool, int)
/home/mpolacek/src/gcc/gcc/cp/semantics.cc:3136
0x114a6ad tsubst_expr(tree_node*, tree_node*, int, tree_node*)
/home/mpolacek/src/gcc/gcc/cp/pt.cc:21104
0x10fcd17 instantiate_non_dependent_expr_internal(tree_node*, int)
/home/mpolacek/src/gcc/gcc/cp/pt.cc:6468
0x11008a5 convert_nontype_argument
/home/mpolacek/src/gcc/gcc/cp/pt.cc:7481
0x1105dfa convert_template_argument
/home/mpolacek/src/gcc/gcc/cp/pt.cc:8833
0x1107d9a coerce_template_parms(tree_node*, tree_node*, tree_node*, int, bool)
/home/mpolacek/src/gcc/gcc/cp/pt.cc:9324
0x110aad8 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int)
/home/mpolacek/src/gcc/gcc/cp/pt.cc:10155
0x11aa0f0 finish_template_type(tree_node*, tree_node*, int)
/home/mpolacek/src/gcc/gcc/cp/semantics.cc:4015
^ permalink raw reply [flat|nested] 2+ messages in thread