From cbc19f3932ff61af3bce86a4681ffa2efbe96690 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 4 Nov 2008 21:06:33 +0100 Subject: [PATCH] re PR c/37106 (ICE with -fpic or -fPIC: in mems_in_disjoint_alias_sets_p, at alias.c:278) PR c/37106 * c-common.c (parse_optimize_options): Save and restore flag_strict_aliasing around decode_options call. * gcc.dg/pr37106-1.c: New test. * gcc.dg/pr37106-2.c: New test. From-SVN: r141584 --- gcc/ChangeLog | 6 ++++++ gcc/c-common.c | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/pr37106-1.c | 27 +++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr37106-2.c | 27 +++++++++++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr37106-1.c create mode 100644 gcc/testsuite/gcc.dg/pr37106-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a0d33c7213..2c42f92ca9c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-11-04 Jakub Jelinek + + PR c/37106 + * c-common.c (parse_optimize_options): Save and restore + flag_strict_aliasing around decode_options call. + 2008-11-04 Uros Bizjak * config/i386/driver-i386.c (enum vendor_signatures): New enum. diff --git a/gcc/c-common.c b/gcc/c-common.c index 84dea11491b..3a97bd7aaf5 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -6979,6 +6979,7 @@ parse_optimize_options (tree args, bool attr_p) bool ret = true; unsigned opt_argc; unsigned i; + int saved_flag_strict_aliasing; const char **opt_argv; tree ap; @@ -7069,9 +7070,14 @@ parse_optimize_options (tree args, bool attr_p) for (i = 1; i < opt_argc; i++) opt_argv[i] = VEC_index (const_char_p, optimize_args, i); + saved_flag_strict_aliasing = flag_strict_aliasing; + /* Now parse the options. */ decode_options (opt_argc, opt_argv); + /* Don't allow changing -fstrict-aliasing. */ + flag_strict_aliasing = saved_flag_strict_aliasing; + VEC_truncate (const_char_p, optimize_args, 0); return ret; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 28f2ad9ec1b..daf656f53f2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-11-04 Jakub Jelinek + + PR c/37106 + * gcc.dg/pr37106-1.c: New test. + * gcc.dg/pr37106-2.c: New test. + 2008-11-03 Chao-ying Fu * gcc.target/mips/dsp-ctrl.c: New test. diff --git a/gcc/testsuite/gcc.dg/pr37106-1.c b/gcc/testsuite/gcc.dg/pr37106-1.c new file mode 100644 index 00000000000..ff73b0b8dfe --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr37106-1.c @@ -0,0 +1,27 @@ +/* PR c/37106 */ +/* { dg-do compile } */ +/* { dg-options "-O1" } */ +/* { dg-options "-O1 -fpic" { target fpic } } */ + +#define SIZE 256 +float a[SIZE], b[SIZE], c[SIZE]; + +void opt3 (void) __attribute__((__optimize__(3))); + +void +opt3 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a[i] = b[i] + c[i]; +} + +void +not_opt3 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a[i] = b[i] - c[i]; +} diff --git a/gcc/testsuite/gcc.dg/pr37106-2.c b/gcc/testsuite/gcc.dg/pr37106-2.c new file mode 100644 index 00000000000..81f061afab2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr37106-2.c @@ -0,0 +1,27 @@ +/* PR c/37106 */ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ +/* { dg-options "-O3 -fpic" { target fpic } } */ + +#define SIZE 256 +float a[SIZE], b[SIZE], c[SIZE]; + +void non_opt3 (void) __attribute__((__optimize__(1))); + +void +not_opt3 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a[i] = b[i] - c[i]; +} + +void +opt3 (void) +{ + int i; + + for (i = 0; i < SIZE; i++) + a[i] = b[i] + c[i]; +} -- 2.30.2