https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63814
Bug ID: 63814 Summary: g++.dg/ipa/pr61160-1.C fails with -m32 on darwin14 Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: ipa Assignee: unassigned at gcc dot gnu.org Reporter: fxcoudert at gcc dot gnu.org With -O3 -m32, g++.dg/ipa/pr61160-1.C fails on x86_64-apple-darwin14. This is a very slightly reduced testcase: --------------------------------- struct CBase { virtual void BaseFunc () {} }; struct MMixin { virtual void * MixinFunc (int, int) = 0; }; struct CExample: CBase, public MMixin { void *MixinFunc (int arg, int arg2) { return this; } }; void *test (MMixin & anExample) { return anExample.MixinFunc (0, 0); } int main () { CExample c; return (test (c) != 0); } --------------------------------- The failure is: $ ./bin/g++ pr61160-1.C -m32 -O3 pr61160-1.C:26:1: error: edge points to wrong declaration: } ^ <function_decl 0x142795e58 MixinFunc.constprop type <method_type 0x142799930 type <pointer_type 0x1426272a0 type <void_type 0x142627150 void> public unsigned SI size <integer_cst 0x142601e70 constant 32> unit size <integer_cst 0x142601e88 constant 4> align 32 symtab 0 alias set 1 canonical type 0x1426272a0 pointer_to_this <pointer_type 0x14262ec78>> QI size <integer_cst 0x142601fa8 constant 8> unit size <integer_cst 0x142601fc0 constant 1> align 8 symtab 0 alias set -1 canonical type 0x142799930 method basetype <record_type 0x14277db28 CExample> arg-types <tree_list 0x1427a4370 value <pointer_type 0x14277ddc8> chain <tree_list 0x142617bb8 value <void_type 0x142627150 void>>>> readonly addressable used nothrow static autoinline decl_5 QI defer-output file pr61160-1.C line 11 col 9 align 16 context <record_type 0x14277db28 CExample>> Instead of: <function_decl 0x14276ea20 _ZThn4_N8CExample9MixinFuncEii type <method_type 0x14277dd20 type <pointer_type 0x1426272a0 type <void_type 0x142627150 void> public unsigned SI size <integer_cst 0x142601e70 constant 32> unit size <integer_cst 0x142601e88 constant 4> align 32 symtab 0 alias set 1 canonical type 0x1426272a0 pointer_to_this <pointer_type 0x14262ec78>> QI size <integer_cst 0x142601fa8 constant 8> unit size <integer_cst 0x142601fc0 constant 1> align 8 symtab 0 alias set -1 canonical type 0x14277dd20 method basetype <record_type 0x14277db28 CExample> arg-types <tree_list 0x14277c640 value <pointer_type 0x14277ddc8> chain <tree_list 0x14277c320 value <integer_type 0x142605690 int> chain <tree_list 0x14277c348 value <integer_type 0x142605690 int> chain <tree_list 0x142617bb8 value <void_type 0x142627150 void>>>>> pointer_to_this <pointer_type 0x14277f3f0>> readonly addressable asm_written used public weak virtual decl_5 QI file pr61160-1.C line 11 col 9 align 8 context <record_type 0x14277db28 CExample> full-name "virtual void* CExample::_ZThn4_N8CExample9MixinFuncEii(int, int)" > main/13 (int main()) @0x14278d188 Type: function definition analyzed Visibility: externally_visible public References: Referring: Availability: available First run: 0 Function flags: body only_called_at_startup Called by: Calls: _ZN8CExample9MixinFuncEii.constprop.3/35 (1.00 per call) (can throw external) pr61160-1.C:26:1: internal compiler error: verify_cgraph_node failed pr61160-1.C:26:1: internal compiler error: Abort trap: 6 g++: internal compiler error: Abort trap: 6 (program cc1plus) zsh: abort ./bin/g++ pr61160-1.C -m32 -O3 and the backtrace is: * frame #0: 0x0000000100ee03f0 cc1plus`internal_error(char const*, ...) frame #1: 0x000000010069adb7 cc1plus`cgraph_node::verify_node() + 4935 frame #2: 0x000000010068fb48 cc1plus`symtab_node::verify() + 104 frame #3: 0x00000001006904a8 cc1plus`symtab_node::verify_symtab_nodes() + 152 frame #4: 0x000000010097ebfc cc1plus`symbol_table::remove_unreachable_nodes(bool, __sFILE*) + 7148 frame #5: 0x0000000100a5f60c cc1plus`execute_todo(unsigned int) + 348 frame #6: 0x0000000100a61e2f cc1plus`execute_one_pass(opt_pass*) + 495 frame #7: 0x0000000100a62aaa cc1plus`execute_ipa_pass_list(opt_pass*) + 154 frame #8: 0x00000001006a18e9 cc1plus`symbol_table::compile() + 1385 frame #9: 0x00000001006a375e cc1plus`symbol_table::finalize_compilation_unit() + 110 frame #10: 0x00000001001062e0 cc1plus`cp_write_global_declarations() + 4480 frame #11: 0x0000000100b3cebf cc1plus`compile_file() + 143 frame #12: 0x0000000100ff1ae4 cc1plus`toplev::main(int, char**) + 3764 frame #13: 0x0000000100ff210c cc1plus`main + 44