http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54898



--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2012-10-11 
15:00:09 UTC ---

What happens is that the input at LTRANS stage has wrecked TYPE_MAIN_VARIANT:



(gdb) call debug_tree ($31)

 <integer_type 0x7ffff692a348 wchar_t readonly SI

    size <integer_cst 0x7ffff67f40a0 type <integer_type 0x7ffff67f00a8

bitsizetype> constant 32>

    unit size <integer_cst 0x7ffff67f40c0 type <integer_type 0x7ffff67f0000

sizetype> constant 4>

    align 32 symtab 0 alias set -1 structural equality precision 32 min

<integer_cst 0x7ffff6912880 -2147483648> max <integer_cst 0x7ffff6912a40

2147483647>>

(gdb) p $31->type_common.main_variant 

$32 = (tree) 0x7ffff6924540

(gdb) call debug_tree ($32)

 <integer_type 0x7ffff6924540 wchar_t SI

    size <integer_cst 0x7ffff67f40a0 type <integer_type 0x7ffff67f00a8

bitsizetype> constant 32>

    unit size <integer_cst 0x7ffff67f40c0 type <integer_type 0x7ffff67f0000

sizetype> constant 4>

    align 32 symtab 0 alias set -1 structural equality precision 32 min

<integer_cst 0x7ffff67f4040 -2147483648> max <integer_cst 0x7ffff67f4060

2147483647> context <translation_unit_decl 0x7ffff6927170 D.2440>>

(gdb) p $31->type_common.main_variant->type_common.main_variant 

$33 = (tree) 0x7ffff67f05e8

(gdb) call debug_tree ($33)

 <integer_type 0x7ffff67f05e8 int public SI

    size <integer_cst 0x7ffff67f40a0 type <integer_type 0x7ffff67f00a8

bitsizetype> constant 32>

    unit size <integer_cst 0x7ffff67f40c0 type <integer_type 0x7ffff67f0000

sizetype> constant 4>

    align 32 symtab 0 alias set -1 canonical type 0x7ffff67f05e8 precision 32

min <integer_cst 0x7ffff67f4040 -2147483648> max <integer_cst 0x7ffff67f4060

2147483647>

    pointer_to_this <pointer_type 0x7ffff67f82a0>>



thus a TYPE_MAIN_VARIANT of a main variant is not itself.  The code

cannot deal with this impossible situation.  Thus,

TYPE_MAIN_VARIANT (t) == TYPE_MAIN_VARIANT (TYPE_MAIN_VARIANT (t))

needs to always hold.



It might be that things break here because $33 is integer_type_node, a

type we pre-load into the streamer cache.



More investigation needed.

Reply via email to