http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52349
Bug #: 52349 Summary: [4.7 Regression] go doesn't bootstrap Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: go AssignedTo: i...@airs.com ReportedBy: ja...@gcc.gnu.org CC: i...@gcc.gnu.org The http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=184436 broke go bootstrap. Simple testcase, even for -O0: ./go1 ice.go package ice type Ice interface { } type M struct { f func(Ice) Ice } func (m *M) foo(c Ice) Ice { return m.f(c) } (distilled from color.go). In create_tmp_from_val we have: (gdb) p debug_tree (val->typed.type) <pointer_type 0x7ffff13b2d20 type <function_type 0x7ffff13beb28 type <record_type 0x7ffff13b2bd0 Ice sizes-gimplified BLK size <integer_cst 0x7ffff1392400 constant 128> unit size <integer_cst 0x7ffff1392420 constant 16> align 64 symtab 0 alias set -1 canonical type 0x7ffff13b2b28 fields <field_decl 0x7ffff13a35f0 __type_descriptor> pointer_to_this <pointer_type 0x7ffff13be348>> QI size <integer_cst 0x7ffff1392080 constant 8> unit size <integer_cst 0x7ffff13920a0 constant 1> align 8 symtab 0 alias set -1 canonical type 0x7ffff13bebd0 arg-types <tree_list 0x7ffff13b6f50 value <record_type 0x7ffff13b2bd0 Ice> chain <tree_list 0x7ffff13896b8 value <void_type 0x7ffff138fbd0>>> pointer_to_this <pointer_type 0x7ffff13bec78>> sizes-gimplified unsigned DI size <integer_cst 0x7ffff137eec0 type <integer_type 0x7ffff138f0a8 bitsizetype> constant 64> unit size <integer_cst 0x7ffff137eee0 type <integer_type 0x7ffff138f000 sizetype> constant 8> align 64 symtab 0 alias set -1 canonical type 0x7ffff138fc78> $7 = void (gdb) p debug_tree (val->typed.type->type_common.main_variant) <pointer_type 0x7ffff138fc78 type <void_type 0x7ffff138fbd0 VOID align 8 symtab 0 alias set -1 canonical type 0x7ffff138fbd0 pointer_to_this <pointer_type 0x7ffff138fc78>> sizes-gimplified public unsigned DI size <integer_cst 0x7ffff137eec0 type <integer_type 0x7ffff138f0a8 bitsizetype> constant 64> unit size <integer_cst 0x7ffff137eee0 type <integer_type 0x7ffff138f000 sizetype> constant 8> align 64 symtab 0 alias set -1 canonical type 0x7ffff138fc78 pointer_to_this <pointer_type 0x7ffff13c3690>> $8 = void so it is obvious that it ICEs soon afterwards, the question is if this is a latent FE bug that pointers to functions shouldn't have void * as its TYPE_MAIN_VARIANT, but rather pointer to the same function type, just without volatile/const/restrict on the POINTER_TYPE, or if the above change wasn't correct. Richard, Ian?