diff options
author | Patrick Palka <ppalka@gcc.gnu.org> | 2016-07-26 15:19:58 +0000 |
---|---|---|
committer | Patrick Palka <ppalka@gcc.gnu.org> | 2016-07-26 15:19:58 +0000 |
commit | 524cf1e47a27e8a89390a46235b979e41781f618 (patch) | |
tree | a53f8a1a5848309a51cb3d1a26203dfdbb2631c6 /gcc/genmodes.c | |
parent | 100665d8d7460dab7a2c324a50ea8ac720ad9c43 (diff) | |
download | gcc-524cf1e47a27e8a89390a46235b979e41781f618.zip gcc-524cf1e47a27e8a89390a46235b979e41781f618.tar.gz gcc-524cf1e47a27e8a89390a46235b979e41781f618.tar.bz2 |
Teach VRP to register assertions along default switch labels (PR18046)
gcc/ChangeLog:
PR tree-optimization/18046
* genmodes.c (emit_mode_size_inline): Emit an assert that
verifies that mode is a valid array index.
(emit_mode_nuinits_inline): Likewise.
(emit_mode_inner_inline): Likewise.
(emit_mode_unit_size_inline): Likewise.
(emit_mode_unit_precision_inline): Likewise.
* tree-vrp.c: Include params.h.
(find_switch_asserts): Register edge assertions for the default
label which correspond to the anti-ranges of each case label.
* params.def (PARAM_MAX_VRP_SWITCH_ASSERTIONS): New.
* doc/invoke.texi: Document it.
gcc/testsuite/ChangeLog:
PR tree-optimization/18046
* gcc.dg/tree-ssa/ssa-dom-thread-6.c: Bump FSM count to 5.
* gcc.dg/tree-ssa/vrp103.c: New test.
* gcc.dg/tree-ssa/vrp104.c: New test.
From-SVN: r238761
Diffstat (limited to 'gcc/genmodes.c')
-rw-r--r-- | gcc/genmodes.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/genmodes.c b/gcc/genmodes.c index 097cc80..1170d4f 100644 --- a/gcc/genmodes.c +++ b/gcc/genmodes.c @@ -976,6 +976,7 @@ unsigned char\n\ mode_size_inline (machine_mode mode)\n\ {\n\ extern %sunsigned char mode_size[NUM_MACHINE_MODES];\n\ + gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);\n\ switch (mode)\n\ {\n", adj_bytesize ? "" : "const "); @@ -1006,6 +1007,7 @@ unsigned char\n\ mode_nunits_inline (machine_mode mode)\n\ {\n\ extern const unsigned char mode_nunits[NUM_MACHINE_MODES];\n\ + gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);\n\ switch (mode)\n\ {"); @@ -1035,6 +1037,7 @@ unsigned char\n\ mode_inner_inline (machine_mode mode)\n\ {\n\ extern const unsigned char mode_inner[NUM_MACHINE_MODES];\n\ + gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);\n\ switch (mode)\n\ {"); @@ -1067,6 +1070,7 @@ mode_unit_size_inline (machine_mode mode)\n\ {\n\ extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES];\ \n\ + gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);\n\ switch (mode)\n\ {"); @@ -1103,6 +1107,7 @@ unsigned short\n\ mode_unit_precision_inline (machine_mode mode)\n\ {\n\ extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES];\n\ + gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);\n\ switch (mode)\n\ {"); |