public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/113620] New: Specialized Template
@ 2024-01-26 15:10 hans.buchmann.wantuch at gmail dot com
2024-01-26 15:37 ` [Bug c++/113620] " xry111 at gcc dot gnu.org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: hans.buchmann.wantuch at gmail dot com @ 2024-01-26 15:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
Bug ID: 113620
Summary: Specialized Template
Product: gcc
Version: 13.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: hans.buchmann.wantuch at gmail dot com
Target Milestone: ---
Created attachment 57225
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57225&action=edit
Bug report generated with: -freport-bug
Compiling the code bug-1.cc
------8<------8<------8<------8<------
class CRC
{
public:
template<typename T>
struct Def
{
using TYP=T;
static const TYP INIT=0;
};
enum Method {MSB_FIRST,LSB_FIRST};
template<Method M,typename DEF>
class BIT{};
template<typename DEF>
struct BIT<MSB_FIRST,DEF>
{
DEF::TYP r=DEF::INIT;
};
};
int main(int argc,char** args)
{
CRC::BIT<CRC::MSB_FIRST,CRC::Def<unsigned short>> crc;
return 0;
}
------8<------8<------8<------8<------
compiling with:
g++ -freport-bug -std=c++2a -c -o bug-1.o bug-1.cc
results in the following output:
see attached bug-report.txt
Sincerely
Hans Buchmann
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] Specialized Template
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
@ 2024-01-26 15:37 ` xry111 at gcc dot gnu.org
2024-01-26 16:58 ` [Bug c++/113620] ICE with missing "typename" and -std=c++20 pinskia at gcc dot gnu.org
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: xry111 at gcc dot gnu.org @ 2024-01-26 15:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
Xi Ruoyao <xry111 at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |xry111 at gcc dot gnu.org
Status|UNCONFIRMED |NEW
Keywords| |ice-on-invalid-code
Ever confirmed|0 |1
Last reconfirmed| |2024-01-26
--- Comment #1 from Xi Ruoyao <xry111 at gcc dot gnu.org> ---
Confirmed.
t1.c:19:21: internal compiler error: tree check: accessed elt 2 of 'tree_vec'
with 1 elts in tsubst, at cp/pt.cc:16216
19 | DEF::TYP r=DEF::INIT;
| ^~~~
0x910d44 tree_vec_elt_check_failed(int, int, char const*, int, char const*)
../../gcc/gcc/tree.cc:9153
0x7a8e83 tree_vec_elt_check(tree_node*, int, char const*, int, char const*)
../../gcc/gcc/tree.h:3865
0x7a8e83 tsubst(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:16216
0xc3ada0 tsubst_scope
../../gcc/gcc/cp/pt.cc:16857
0xc3ada0 tsubst_qualified_id
../../gcc/gcc/cp/pt.cc:17133
0xc153cd tsubst_expr(tree_node*, tree_node*, int, tree_node*)
../../gcc/gcc/cp/pt.cc:20199
0xb03627 maybe_instantiate_nsdmi_init(tree_node*, int)
../../gcc/gcc/cp/init.cc:624
0xb03b0a maybe_instantiate_nsdmi_init(tree_node*, int)
../../gcc/gcc/cp/init.cc:679
0xb03b0a get_nsdmi(tree_node*, bool, int)
../../gcc/gcc/cp/init.cc:656
0xb34ed1 walk_field_subobs
../../gcc/gcc/cp/method.cc:2466
0xb35576 walk_field_subobs
../../gcc/gcc/cp/method.cc:2390
0xb35576 synthesized_method_walk
../../gcc/gcc/cp/method.cc:2835
0xb35eed get_defaulted_eh_spec(tree_node*, int)
../../gcc/gcc/cp/method.cc:2877
0xc1a078 maybe_instantiate_noexcept(tree_node*, int)
../../gcc/gcc/cp/pt.cc:26655
0xc19ee6 maybe_instantiate_noexcept(tree_node*, int)
../../gcc/gcc/cp/pt.cc:26645
0xae729a mark_used(tree_node*, int)
../../gcc/gcc/cp/decl2.cc:5811
0xa1af3e build_over_call
../../gcc/gcc/cp/call.cc:10524
0xa183bf build_new_method_call(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, tree_node*, int, tree_node**, int)
../../gcc/gcc/cp/call.cc:11796
0xa1962a build_special_member_call(tree_node*, tree_node*, vec<tree_node*,
va_gc, vl_embed>**, tree_node*, int, int)
../../gcc/gcc/cp/call.cc:11281
0xb07819 expand_default_init
../../gcc/gcc/cp/init.cc:2202
With -std=c++17 it's fine:
t1.c:19:5: error: need 'typename' before 'DEF::TYP' because 'DEF' is a
dependent scope
19 | DEF::TYP r=DEF::INIT;
| ^~~
| typename
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] ICE with missing "typename" and -std=c++20
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
2024-01-26 15:37 ` [Bug c++/113620] " xry111 at gcc dot gnu.org
@ 2024-01-26 16:58 ` pinskia at gcc dot gnu.org
2024-01-26 16:59 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-01-26 16:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|ice-on-invalid-code |ice-on-valid-code
Known to fail| |5.1.0
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Xi Ruoyao from comment #1)
> With -std=c++17 it's fine:
>
> t1.c:19:5: error: need 'typename' before 'DEF::TYP' because 'DEF' is a
> dependent scope
> 19 | DEF::TYP r=DEF::INIT;
> | ^~~
> | typename
Note once you add the typename (which is optional in C++20 by the way), the ICE
is back in C++11 mode even.
This has been ICEing from at least GCC 5.1.0.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] ICE with missing "typename" and -std=c++20
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
2024-01-26 15:37 ` [Bug c++/113620] " xry111 at gcc dot gnu.org
2024-01-26 16:58 ` [Bug c++/113620] ICE with missing "typename" and -std=c++20 pinskia at gcc dot gnu.org
@ 2024-01-26 16:59 ` pinskia at gcc dot gnu.org
2024-01-26 17:11 ` [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI pinskia at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-01-26 16:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to fail| |4.9.0
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
In GCC 4.8.5, it was rejected (incorrectly):
```
<source>:19:25: error: 'DEF' has not been declared
typename DEF::TYP r=DEF::INIT;
^
```
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
` (2 preceding siblings ...)
2024-01-26 16:59 ` pinskia at gcc dot gnu.org
@ 2024-01-26 17:11 ` pinskia at gcc dot gnu.org
2024-01-26 18:04 ` ppalka at gcc dot gnu.org
2024-01-26 18:39 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-01-26 17:11 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Created attachment 57229
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=57229&action=edit
Reduced testcase
I reduced the testcase slightly to show it is NSDMI related dealing with a
dependent value only with the specialization.
Note a workaround is to add a constructor which does the initialization instead
of using NSDMI.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
` (3 preceding siblings ...)
2024-01-26 17:11 ` [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI pinskia at gcc dot gnu.org
@ 2024-01-26 18:04 ` ppalka at gcc dot gnu.org
2024-01-26 18:39 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: ppalka at gcc dot gnu.org @ 2024-01-26 18:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ppalka at gcc dot gnu.org
--- Comment #5 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Seems to be a name lookup issue ultimately:
struct A {
template<class T, class U>
struct B;
template<class V>
struct B<int, V> {
int x = V::value; // error: 'V' has not been declared
int y = T::value; // no error!
int z = U::value; // no error!
};
};
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
` (4 preceding siblings ...)
2024-01-26 18:04 ` ppalka at gcc dot gnu.org
@ 2024-01-26 18:39 ` pinskia at gcc dot gnu.org
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-01-26 18:39 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113620
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Patrick Palka from comment #5)
> Seems to be a name lookup issue ultimately:
>
> struct A {
> template<class T, class U>
> struct B;
>
> template<class V>
> struct B<int, V> {
> int x = V::value; // error: 'V' has not been declared
> int y = T::value; // no error!
> int z = U::value; // no error!
> };
> };
That would make sense on why it was rejected before GCC 4.9 even.
Now I wonder if this is related to the diagnostic issue mentioned in
https://gcc.gnu.org/pipermail/gcc-patches/2024-January/643811.html even.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-01-26 18:39 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-26 15:10 [Bug c++/113620] New: Specialized Template hans.buchmann.wantuch at gmail dot com
2024-01-26 15:37 ` [Bug c++/113620] " xry111 at gcc dot gnu.org
2024-01-26 16:58 ` [Bug c++/113620] ICE with missing "typename" and -std=c++20 pinskia at gcc dot gnu.org
2024-01-26 16:59 ` pinskia at gcc dot gnu.org
2024-01-26 17:11 ` [Bug c++/113620] ICE with inner class template speciailization and depdent NSDMI pinskia at gcc dot gnu.org
2024-01-26 18:04 ` ppalka at gcc dot gnu.org
2024-01-26 18:39 ` pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).