https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66190
Bug ID: 66190 Summary: [5/6 Regression] ICE: tree code ‘call_expr’ is not supported in LTO streams with -fsanitize=null Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org Target Milestone: --- $ cat test.ii class A { public: void m_fn1(int); }; class GrAAHairLinePathRenderer { ~GrAAHairLinePathRenderer(); A onStencilPath_drawState; virtual void m_fn2() { static int a; static int &b(a); onStencilPath_drawState.m_fn1(b); } }; GrAAHairLinePathRenderer::~GrAAHairLinePathRenderer() {} $ g++ test.ii -flto -c -fsanitize=null test.ii:14:56: internal compiler error: tree code ‘call_expr’ is not supported in LTO streams GrAAHairLinePathRenderer::~GrAAHairLinePathRenderer() {} ^ 0x678d8e lto_write_tree ../../gcc/lto-streamer-out.c:415 0x678d8e lto_output_tree_1 ../../gcc/lto-streamer-out.c:464 0x678d8e DFS::DFS(output_block*, tree_node*, bool, bool, bool) ../../gcc/lto-streamer-out.c:654 0xe378ce lto_output_tree(output_block*, tree_node*, bool, bool) ../../gcc/lto-streamer-out.c:1609 0xdbf5f5 write_global_stream ../../gcc/lto-streamer-out.c:2397 0xdbf5f5 lto_output_decl_state_streams(output_block*, lto_out_decl_state*) ../../gcc/lto-streamer-out.c:2444 0xdbf5f5 produce_asm_for_decls() ../../gcc/lto-streamer-out.c:2814 0xdb4004 write_lto() [clone .lto_priv.4579] ../../gcc/passes.c:2410 0xe22b49 ipa_write_summaries_1 ../../gcc/passes.c:2471 0xe22b49 ipa_write_summaries() ../../gcc/passes.c:2531 0xd41543 ipa_passes ../../gcc/cgraphunit.c:2216 0xd41543 symbol_table::compile() ../../gcc/cgraphunit.c:2312 0xd50e1d symbol_table::finalize_compilation_unit() ../../gcc/cgraphunit.c:2461 0xdd9dc0 cp_write_global_declarations() ../../gcc/cp/decl2.c:4755 Breakpoint 1, lto_write_tree (ob=0x1a41670, expr=0x7ffff6c41948, ref_p=false) at ../../gcc/lto-streamer-out.c:415 415 get_tree_code_name (TREE_CODE (expr))); (gdb) p debug_tree(expr) <call_expr 0x7ffff6c41948 type <void_type 0x7ffff6c5d000 void VOID align 8 symtab 0 alias set -1 canonical type 0x7ffff6c5d000 pointer_to_this <pointer_type 0x7ffff6c5d150>> side-effects tree_0 tree_3 arg 0 <addr_expr 0x7ffff6dc4540 type <pointer_type 0x7ffff6c5d7e0 type <integer_type 0x7ffff6c3b690 int> public unsigned DI size <integer_cst 0x7ffff6c37e58 constant 64> unit size <integer_cst 0x7ffff6c37e70 constant 8> align 64 symtab 0 alias set -1 canonical type 0x7ffff6c5d7e0> constant arg 0 <var_decl 0x7ffff6c44cf0 a type <integer_type 0x7ffff6c3b690 int> addressable used public static weak decl_5 decl_6 SI file test.ii line 9 col 16 size <integer_cst 0x7ffff6c590a8 constant 32> unit size <integer_cst 0x7ffff6c590c0 constant 4> align 32 context <function_decl 0x7ffff6dd7870 m_fn2> chain <var_decl 0x7ffff6c44d80 b>>> arg 1 <integer_cst 0x7ffff6dd6588 type <pointer_type 0x7ffff6c5d7e0> constant 2> arg 2 <integer_cst 0x7ffff6c59288 type <integer_type 0x7ffff6c5d348> constant 0>> $1 = void Thanks, Martin