diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-11-04 21:06:33 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-11-04 21:06:33 +0100 |
commit | cbc19f3932ff61af3bce86a4681ffa2efbe96690 (patch) | |
tree | f32a249f4d5af439f025a12c5e338d4006d5b851 /gcc | |
parent | 5c6ed53afc63d941494bb6c9f0640ad7160031b3 (diff) | |
download | gcc-cbc19f3932ff61af3bce86a4681ffa2efbe96690.zip gcc-cbc19f3932ff61af3bce86a4681ffa2efbe96690.tar.gz gcc-cbc19f3932ff61af3bce86a4681ffa2efbe96690.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-common.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr37106-1.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr37106-2.c | 27 |
5 files changed, 72 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a0d33c..2c42f92 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-11-04 Jakub Jelinek <jakub@redhat.com> + + PR c/37106 + * c-common.c (parse_optimize_options): Save and restore + flag_strict_aliasing around decode_options call. + 2008-11-04 Uros Bizjak <ubizjak@gmail.com> * config/i386/driver-i386.c (enum vendor_signatures): New enum. diff --git a/gcc/c-common.c b/gcc/c-common.c index 84dea11..3a97bd7 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 28f2ad9..daf656f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-11-04 Jakub Jelinek <jakub@redhat.com> + + PR c/37106 + * gcc.dg/pr37106-1.c: New test. + * gcc.dg/pr37106-2.c: New test. + 2008-11-03 Chao-ying Fu <fu@mips.com> * 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 0000000..ff73b0b --- /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 0000000..81f061a --- /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]; +} |