From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2017 invoked by alias); 5 Mar 2013 10:39:10 -0000 Received: (qmail 32327 invoked by uid 48); 5 Mar 2013 10:38:42 -0000 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug lto/56532] New: valgrind errors with -flto Date: Tue, 05 Mar 2013 10:39:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: lto X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00328.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56532 Bug #: 56532 Summary: valgrind errors with -flto Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: lto AssignedTo: unassigned@gcc.gnu.org ReportedBy: jakub@gcc.gnu.org valgrind --leak-check=full --track-origins=yes --db-attach=yes ./cc1plus pr46984.C -O -fipa-cp -fno-early-inlining -flto -quiet gives: ==5852== Conditional jump or move depends on uninitialised value(s) ==5852== at 0x1205C84: bp_pack_var_len_unsigned(bitpack_d*, unsigned long) (data-streamer.c:36) ==5852== by 0xB2144D: lto_output_edge(lto_simple_output_block*, cgraph_edge*, lto_symtab_encoder_d*) (lto-cgraph.c:277) ==5852== by 0xB2285F: output_outgoing_cgraph_edges(cgraph_edge*, lto_simple_output_block*, lto_symtab_encoder_d*) (lto-cgraph.c:651) ==5852== by 0xB22F9E: output_symtab() (lto-cgraph.c:840) ==5852== by 0xB2DCD1: lto_output() (lto-streamer-out.c:1000) ==5852== by 0xB730F7: ipa_write_summaries_2(opt_pass*, lto_out_decl_state*) (passes.c:2408) ==5852== by 0xB731E6: ipa_write_summaries_1(lto_symtab_encoder_d*) (passes.c:2438) ==5852== by 0xB733B6: ipa_write_summaries() (passes.c:2492) ==5852== by 0x893292: ipa_passes() (cgraphunit.c:1905) ==5852== by 0x8936B7: compile() (cgraphunit.c:1991) ==5852== by 0x8939B7: finalize_compilation_unit() (cgraphunit.c:2119) ==5852== by 0x647071: cp_write_global_declarations() (decl2.c:4318) ==5852== Uninitialised value was created by a client request ==5852== at 0x7F654A: ggc_internal_alloc_stat(unsigned long) (ggc-page.c:1339) ==5852== by 0x886F18: cgraph_create_edge_1(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:793) ==5852== by 0x88714F: cgraph_create_edge(cgraph_node*, cgraph_node*, gimple_statement_d*, long, int) (cgraph.c:838) ==5852== by 0x88F6BF: cgraph_analyze_function(cgraph_node*) (cgraphunit.c:630) ==5852== by 0x8906C8: cgraph_analyze_functions() (cgraphunit.c:964) ==5852== by 0x8939A8: finalize_compilation_unit() (cgraphunit.c:2110) ==5852== by 0x647071: cp_write_global_declarations() (decl2.c:4318) ==5852== by 0xC63E12: compile_file() (toplev.c:557) ==5852== by 0xC65DB5: do_compile() (toplev.c:1876) ==5852== by 0xC65F20: toplev_main(int, char**) (toplev.c:1952) ==5852== by 0x12EC1CD: main (main.c:36) 273 uid = (!gimple_has_body_p (edge->caller->symbol.decl) 274 ? edge->lto_stmt_uid : gimple_uid (edge->call_stmt)); gimple_has_body_p is false (edge->call_stmt is NULL, DECL_STRUCT_FUNCTION (edge->caller->symbol.decl) is NULL), and lto_stmt_uid is clearly uninitialized. When run under gdb rather than valgrind where you can't make interior calls: b lto-cgraph.c:273 if !gimple_has_body_p (edge->caller->symbol.decl) && edge->lto_stmt_uid == 0xafafafaf shows (gdb) p debug_generic_stmt (edge->caller->symbol.decl) _ZThn528_N1D3fooEv (gdb) p debug_generic_stmt (edge->callee->symbol.decl) *.LTHUNK0 Which also shows why I haven't seen any such failures in gcc/testsuite/gcc/gcc.log, while tons of them in gcc/testsuite/g++/g++.log - bet only thunks don't have body here and the code doesn't count with those.