int foo (void); int bar (void) __attribute__((const)); int test (int x) { int a = (x == 10000 ? foo : bar) (); int b = (x == 10000 ? foo : bar) (); return a + b; } ICEs in mark_operand_necessary. 3.4.x works and so does 4.2 and trunk.
Related to in PR29382 described common_pointer_type, but perhaps not just that. -- Summary: [4.1 Regression] ICE in mark_operand_necessary Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32139