http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56455
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-02-26 CC| |jakub at gcc dot gnu.org, | |steven at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-02-26 12:03:15 UTC --- Seems to be broken by http://gcc.gnu.org/ml/gcc-patches/2012-05/msg00163.html The assumption that only alpha-vms doesn't define ASM_OUTPUT_ADDR_DIFF_ELT doesn't seem to be true. echo `for i in config/*/; do grep -q ASM_OUTPUT_ADDR_DIFF_ELT $i/* || echo $i; done` config/avr/ config/m32c/ config/mep/ config/moxie/ config/picochip/ config/stormy16/ config/vms/ 2013-02-26 Jakub Jelinek <ja...@redhat.com> PR target/56455 * stmt.c (expand_switch_as_decision_tree_p): If flag_pic and ASM_OUTPUT_ADDR_DIFF_ELT isn't defined, return true. --- gcc/stmt.c.jj 2013-01-11 09:03:17.000000000 +0100 +++ gcc/stmt.c 2013-02-26 12:43:16.362812625 +0100 @@ -1760,6 +1760,10 @@ expand_switch_as_decision_tree_p (tree r return true; if (!flag_jump_tables) return true; +#ifndef ASM_OUTPUT_ADDR_DIFF_ELT + if (flag_pic) + return true; +#endif /* If the switch is relatively small such that the cost of one indirect jump on the target are higher than the cost of a fixes this, or do you want Steven to add that if (flag_pic) flag_jump_tables = false; to all those targets?