Bug 88853 - ICE: verify_type failed (error: type variant differs by TYPE_PACKED) with -fpack-struct -g
Summary: ICE: verify_type failed (error: type variant differs by TYPE_PACKED) with -fp...
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-checking, ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2019-01-15 09:28 UTC by Arseny Solokha
Modified: 2023-01-26 15:31 UTC (History)
4 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail: 10.3.0, 11.3.0, 12.1.0, 13.0, 6.3.0, 7.4.0, 8.2.0, 9.1.0
Last reconfirmed: 2019-06-20 00:00:00


Attachments
Testcase (251 bytes, text/plain)
2019-01-15 09:28 UTC, Arseny Solokha
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Arseny Solokha 2019-01-15 09:28:25 UTC
Created attachment 45433 [details]
Testcase

g++-9.0.0-alpha20190113 snapshot (r267906), 8.2, 7.4, 6.3 all ICE when compiling the attached snippet reduced from gcc/testsuite/g++.dg/ext/pr85503.C w/ -fpack-struct -g:

% g++-9.0.0-alpha20190113 -fpack-struct -g -c jxdgvov9.cc
jxdgvov9.cc: In instantiation of 'class yp<fd<double, 0> >':
jxdgvov9.cc:15:7:   required from 'class n1<fd<double, 0> >'
jxdgvov9.cc:21:7:   required from 'class c4<fd<double, 0> >'
jxdgvov9.cc:33:7:   required from 'class hb<fd<double, 0> >'
jxdgvov9.cc:45:7:   required from 'class fd<double, 0>'
jxdgvov9.cc:52:7:   required from 'class dh<dh<fd<double, 0> > >'
jxdgvov9.cc:17:22:   required from 'class n1<dh<fd<double, 0> > >'
jxdgvov9.cc:57:19:   required from here
jxdgvov9.cc:26:7: error: type variant differs by TYPE_PACKED
   26 | class yp
      |       ^~
 <record_type 0x7fefa98a3e70 fd packed type_5 type_6 VOID
    align:8 warn_if_not_align:0 symtab:-1451847200 alias-set -1 canonical-type 0x7fefa98a3e70 context <translation_unit_decl 0x7fefa975a168 jxdgvov9.cc>
    full-name "class fd<double, 0>"
    no-binfo use_template=1 interface-unknown
    chain <type_decl 0x7fefa986fb48 fd>>
 <record_type 0x7fefa98a3f18 fd readonly type_5 VOID
    align:8 warn_if_not_align:0 symtab:-1451847120 alias-set -1 canonical-type 0x7fefa98a3f18 context <translation_unit_decl 0x7fefa975a168 jxdgvov9.cc>
    full-name "const class fd<double, 0>"
    no-binfo use_template=1 interface-unknown>
jxdgvov9.cc:26:7: internal compiler error: verify_type failed
0x127580b verify_type(tree_node const*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/tree.c:14555
0xc022f4 gen_type_die_with_usage
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25449
0xc040e6 gen_type_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25679
0xc1f343 gen_decl_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:26272
0xc227e3 gen_member_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25133
0xc227e3 gen_struct_or_union_type_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25229
0xc1d954 gen_tagged_type_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25430
0xc02845 gen_type_die_with_usage
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25625
0xc040e6 gen_type_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:25679
0xc1e740 gen_decl_die
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:26311
0xc1f9e6 dwarf2out_decl
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:26856
0xc1feb8 dwarf2out_type_decl
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:26583
0xc1feb8 dwarf2out_type_decl
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/dwarf2out.c:26578
0xebfb98 rest_of_type_compilation(tree_node*, int)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/passes.c:339
0x8bad7c finish_struct_1(tree_node*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/class.c:7055
0xa0f5d3 instantiate_class_template_1
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/pt.c:11397
0xa0f5d3 instantiate_class_template(tree_node*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/pt.c:11436
0xa565fd complete_type(tree_node*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/typeck.c:138
0xa5673b complete_type(tree_node*)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/typeck.c:119
0xa5673b complete_type_or_maybe_complain(tree_node*, tree_node*, int)
	/var/tmp/portage/sys-devel/gcc-9.0.0_alpha20190113/work/gcc-9-20190113/gcc/cp/typeck.c:150
Comment 1 Martin Sebor 2019-02-22 17:38:48 UTC
Author: msebor
Date: Fri Feb 22 17:38:11 2019
New Revision: 269125

URL: https://gcc.gnu.org/viewcvs?rev=269125&root=gcc&view=rev
Log:
PR tree-optimization/88993 - GCC 9 -Wformat-overflow=2 should reflect real libc limits
PR tree-optimization/88835 - overly aggressive -Werror=format-overflow for printf

gcc/ChangeLog:

	PR tree-optimization/88993
	PR tree-optimization/88853
	* gimple-ssa-sprintf.c (sprintf_dom_walker::call_info::is_file_func):
	New helper.
	(sprintf_dom_walker::call_info::is_string_func): New helper.
	(format_directive): Only issue "may exceed" 4095/INT_MAX warnings
	for formatted string functions.
	(sprintf_dom_walker::handle_gimple_call): Fix a typo in a comment.

gcc/testsuite/ChangeLog:

	PR tree-optimization/88993
	PR tree-optimization/88853
	* gcc.dg/tree-ssa/builtin-fprintf-warn-2.c: New test.
	* gcc.dg/tree-ssa/builtin-printf-warn-2.c: New test.
	* gcc.dg/tree-ssa/builtin-snprintf-warn-3.c: Adjust.
	* gcc.dg/tree-ssa/builtin-sprintf-warn-18.c: Same.


Added:
    trunk/gcc/testsuite/gcc.dg/tree-ssa/builtin-fprintf-warn-2.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/builtin-printf-warn-2.c
Modified:
    trunk/gcc/gimple-ssa-sprintf.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-3.c
    trunk/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-18.c
Comment 2 Martin Sebor 2019-02-22 18:39:57 UTC
Please ignore comment #1 -- wrong bug id in the commit.
Comment 3 Marek Polacek 2019-06-20 22:44:40 UTC
Confirmed with gcc version 10.0.0 20190620 (experimental) (GCC):

88853.C: In instantiation of ‘class yp<fd<double, 0> >’:
88853.C:15:7:   required from ‘class n1<fd<double, 0> >’
88853.C:21:7:   required from ‘class c4<fd<double, 0> >’
88853.C:33:7:   required from ‘class hb<fd<double, 0> >’
88853.C:45:7:   required from ‘class fd<double, 0>’
88853.C:52:7:   required from ‘class dh<dh<fd<double, 0> > >’
88853.C:17:22:   required from ‘class n1<dh<fd<double, 0> > >’
88853.C:57:19:   required from here
88853.C:26:7: error: type variant differs by TYPE_PACKED
   26 | class yp
      |       ^~
 <record_type 0x7ff011706498 fd packed type_5 type_6 VOID
    align:8 warn_if_not_align:0 symtab:291254432 alias-set -1 canonical-type 0x7ff011706498 context <translation_unit_decl 0x7ff0115a5168 88853.C>
    full-name "class fd<double, 0>"
    no-binfo use_template=1 interface-unknown
    chain <type_decl 0x7ff0116bdbe0 fd>>
 <record_type 0x7ff011706540 fd readonly type_5 VOID
    align:8 warn_if_not_align:0 symtab:291254512 alias-set -1 canonical-type 0x7ff011706540 context <translation_unit_decl 0x7ff0115a5168 88853.C>
    full-name "const class fd<double, 0>"
    no-binfo use_template=1 interface-unknown>
88853.C:26:7: internal compiler error: ‘verify_type’ failed
0x182ff70 verify_type(tree_node const*)
	/home/mpolacek/src/gcc/gcc/tree.c:14650
0xe2127e gen_type_die_with_usage
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25557
0xe21eb1 gen_type_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25787
0xe23b4c gen_decl_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:26380
0xe1fffc gen_member_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25241
0xe20749 gen_struct_or_union_type_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25337
0xe21211 gen_tagged_type_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25538
0xe21b2b gen_type_die_with_usage
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25733
0xe21eb1 gen_type_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:25787
0xe23df2 gen_decl_die
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:26419
0xe252ee dwarf2out_decl
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:26964
0xe24772 dwarf2out_type_decl
	/home/mpolacek/src/gcc/gcc/dwarf2out.c:26691
0x127930d rest_of_type_compilation(tree_node*, int)
	/home/mpolacek/src/gcc/gcc/passes.c:339
0x8a57a6 finish_struct_1(tree_node*)
	/home/mpolacek/src/gcc/gcc/cp/class.c:7091
0xab7d6c instantiate_class_template_1
	/home/mpolacek/src/gcc/gcc/cp/pt.c:11495
0xab7ee2 instantiate_class_template(tree_node*)
	/home/mpolacek/src/gcc/gcc/cp/pt.c:11534
0xb845c2 complete_type(tree_node*)
	/home/mpolacek/src/gcc/gcc/cp/typeck.c:139
0xb845e7 complete_type_or_maybe_complain(tree_node*, tree_node*, int)
	/home/mpolacek/src/gcc/gcc/cp/typeck.c:151
0xb84685 complete_type_or_else(tree_node*, tree_node*)
	/home/mpolacek/src/gcc/gcc/cp/typeck.c:168
0x94ccfd xref_basetypes(tree_node*, tree_node*)
	/home/mpolacek/src/gcc/gcc/cp/decl.c:14310
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Comment 4 David Binderman 2023-01-26 15:31:14 UTC
I get something similar for this C code:

enum fmt_type parse_num_range(const enum fmt_type);
enum __attribute__((packed)) fmt_type {
  FMT_NUMBER_OF_FORMATS
} parse_number(const enum fmt_type) {}

$ /usr/bin/gcc -c -g bug877.c
$ ~/gcc/results/bin/gcc -c -g bug877.c
bug877.c: In function ‘parse_number’:
bug877.c:4:27: error: type variant differs by TYPE_PACKED
    4 | } parse_number(const enum fmt_type) {}
      |                           ^~~~~~~~
 <enumeral_type 0x7fc8f09b4348 fmt_type
    type <integer_type 0x7fc8f0821348 unsigned char public unsigned QI
        size <integer_cst 0x7fc8f0802e88 constant 8>

This error seems like a regression in gcc-13. 

The bug first appears sometime before 9b111debbfb79a0a.