Bug 105229 - [11/12/13/14/15 Regression] ICE in lookup_template_class_1, at cp/pt.cc:10111
Summary: [11/12/13/14/15 Regression] ICE in lookup_template_class_1, at cp/pt.cc:10111
Status: ASSIGNED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 12.0
: P2 normal
Target Milestone: 11.5
Assignee: Simon Martin
URL:
Keywords: ice-on-invalid-code, needs-bisection
Depends on:
Blocks:
 
Reported: 2022-04-11 16:55 UTC by G. Steinmetz
Modified: 2024-05-06 18:59 UTC (History)
3 users (show)

See Also:
Host:
Target: x86_64-pc-linux-gnu
Build:
Known to work: 12.2.0, 13.0
Known to fail: 12.1.0
Last reconfirmed: 2022-04-11 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description G. Steinmetz 2022-04-11 16:55:40 UTC
Started between 20200503 and 20200510 :


$ cat z1.cc
template <typename> void bar ()
{
  [] <int> {}.operator () <> ();
}
void foo ()
{
  bar<int> ();
}


$ g++-12-20220410 -c z1.cc
z1.cc: In instantiation of 'void bar() [with <template-parameter-1-1> = int]':
z1.cc:7:12:   required from here
z1.cc:3:28: internal compiler error: in lookup_template_class_1, at cp/pt.cc:10111
    3 |   [] <int> {}.operator () <> ();
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~^
0x990981 lookup_template_class_1
        ../../gcc/cp/pt.cc:10111
0x990981 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*, int, int)
        ../../gcc/cp/pt.cc:10350
0x990cb2 tsubst_aggr_type
        ../../gcc/cp/pt.cc:13738
0x97a962 tsubst(tree_node*, tree_node*, int, tree_node*)
        ../../gcc/cp/pt.cc:15649
0x9a717b tsubst_baselink
        ../../gcc/cp/pt.cc:16453
0x976d2b tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
        ../../gcc/cp/pt.cc:21028
0x975385 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
        ../../gcc/cp/pt.cc:20658
0x99b274 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.cc:19473
0x99918d tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.cc:18486
0x999b9f tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.cc:18458
0x99b233 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.cc:18815
0x97f679 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
        ../../gcc/cp/pt.cc:18444
0x97f679 instantiate_body
        ../../gcc/cp/pt.cc:26393
0x980da7 instantiate_decl(tree_node*, bool, bool)
        ../../gcc/cp/pt.cc:26685
0x9c780b instantiate_pending_templates(int)
        ../../gcc/cp/pt.cc:26764
0x8281e6 c_parse_final_cleanups()
        ../../gcc/cp/decl2.cc:5113
Comment 1 Marek Polacek 2022-04-11 17:10:32 UTC
Confirmed.  Started with r11-86-gef3479afc5ab41

commit ef3479afc5ab415f00a53fc6f6a990df7f6a0747
Author: Marek Polacek <polacek@redhat.com>
Date:   Tue Apr 28 22:30:44 2020 -0400

    c++: Member template function lookup failure [PR94799]

which changed

$ ./cc1plus.r11-85 -quiet ~/105229.C -std=c++2a
/home/mpolacek/105229.C: In function ‘void bar()’:
/home/mpolacek/105229.C:3:12: error: expected ‘(’ before ‘{’ token
    3 |   [] <int> {}.operator () <> ();
      |            ^
      |            (
/home/mpolacek/105229.C:3:28: error: expected primary-expression before ‘>’ token
    3 |   [] <int> {}.operator () <> ();
      |                            ^
/home/mpolacek/105229.C:3:31: error: expected primary-expression before ‘)’ token
    3 |   [] <int> {}.operator () <> ();
      |                               ^

to

$ ./cc1plus.r11-86 -quiet ~/105229.C -std=c++2a
/home/mpolacek/105229.C: In function ‘void bar()’:
/home/mpolacek/105229.C:3:12: error: expected ‘(’ before ‘{’ token
    3 |   [] <int> {}.operator () <> ();
      |            ^
      |            (
/home/mpolacek/105229.C: In instantiation of ‘void bar() [with <template-parameter-1-1> = int]’:
/home/mpolacek/105229.C:7:13:   required from here
/home/mpolacek/105229.C:3:28: internal compiler error: in lookup_template_class_1, at cp/pt.c:9891
    3 |   [] <int> {}.operator () <> ();
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~^
unrecognized DWARF version in .debug_info at 6
0xbc18c9 lookup_template_class_1
	../../gcc/cp/pt.c:9891
0xbc3176 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*, int, int)
	../../gcc/cp/pt.c:10114
0xbd10d0 tsubst_aggr_type
	../../gcc/cp/pt.c:13382
0xbdd578 tsubst(tree_node*, tree_node*, int, tree_node*)
	../../gcc/cp/pt.c:15169
0xbe0fe1 tsubst_baselink
	../../gcc/cp/pt.c:16001
0xbf8c92 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
	../../gcc/cp/pt.c:20188
0xbf638e tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
	../../gcc/cp/pt.c:19730
0xbf1cd2 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	../../gcc/cp/pt.c:18753
0xbea656 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	../../gcc/cp/pt.c:17865
0xbea3e8 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	../../gcc/cp/pt.c:17835
0xbed092 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	../../gcc/cp/pt.c:18154
0xc11905 instantiate_decl(tree_node*, bool, bool)
	../../gcc/cp/pt.c:25714
0xc122c4 instantiate_pending_templates(int)
	../../gcc/cp/pt.c:25830
Comment 2 Richard Biener 2022-04-21 07:51:38 UTC
GCC 11.3 is being released, retargeting bugs to GCC 11.4.
Comment 3 Andrew Pinski 2023-03-23 19:00:18 UTC
Seems fixed for GCC 12.2.0 and the trunk.
Comment 4 Jakub Jelinek 2023-05-29 10:06:42 UTC
GCC 11.4 is being released, retargeting bugs to GCC 11.5.
Comment 5 Simon Martin 2024-04-30 14:50:44 UTC
It does not seem to ICE anymore with trunk. Will double check and if so, submit a new testcase.
Comment 6 Simon Martin 2024-05-06 18:59:24 UTC
The testcase ICEs with 11.3 (https://godbolt.org/z/qoYqK8zj9) but not 11.4 (https://godbolt.org/z/K8q6qYPba)

Will check if we need to add a new test case of it's already covered.