aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeoff Keating <geoffk@cygnus.com>2000-06-23 20:05:55 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2000-06-23 20:05:55 +0000
commit3e0abe15d14d78cd9b00e422082178a69a2fa272 (patch)
treef7d46e1f2a630caf82a788c880e071b187d02dab /gcc
parent56e3dd2cea5979ccedbb18968098f07ffb6b5f95 (diff)
downloadgcc-3e0abe15d14d78cd9b00e422082178a69a2fa272.zip
gcc-3e0abe15d14d78cd9b00e422082178a69a2fa272.tar.gz
gcc-3e0abe15d14d78cd9b00e422082178a69a2fa272.tar.bz2
alias.c (fixed_scalar_and_varying_struct_p): Don't examine struct vs.
* alias.c (fixed_scalar_and_varying_struct_p): Don't examine struct vs. scalar-ness when -fno-strict-aliasing. and a test case to test it, gcc.dg/20000623-1.c. From-SVN: r34668
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/alias.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/20000623-1.c17
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 78d3f0d..21e230c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-23 Geoffrey Keating <geoffk@cygnus.com>
+
+ * alias.c (fixed_scalar_and_varying_struct_p): Don't examine
+ struct vs. scalar-ness when -fno-strict-aliasing.
+
2000-06-23 Nathan Sidwell <nathan@codesourcery.com>
* cpplib.c (struct pragma_entry): New structure.
diff --git a/gcc/alias.c b/gcc/alias.c
index 07f8701..55cc212 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -1523,6 +1523,9 @@ fixed_scalar_and_varying_struct_p (mem1, mem2, mem1_addr, mem2_addr, varies_p)
rtx mem1_addr, mem2_addr;
int (*varies_p) PARAMS ((rtx));
{
+ if (! flag_strict_aliasing)
+ return NULL_RTX;
+
if (MEM_SCALAR_P (mem1) && MEM_IN_STRUCT_P (mem2)
&& !varies_p (mem1_addr) && varies_p (mem2_addr))
/* MEM1 is a scalar at a fixed address; MEM2 is a struct at a
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b3ad82b..5b7babe 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2000-06-23 Geoffrey Keating <geoffk@cygnus.com>
+
+ * gcc.dg/20000623-1.c: New test.
+
2000-06-22 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/execute/20000622-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/20000623-1.c b/gcc/testsuite/gcc.dg/20000623-1.c
new file mode 100644
index 0000000..0a5cd248
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/20000623-1.c
@@ -0,0 +1,17 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -fno-strict-aliasing" } */
+
+struct foos { int l; };
+int foo;
+static struct foos *getfoo(void);
+int main (void)
+{
+ struct foos *f = getfoo();
+ f->l = 1;
+ foo = 2;
+ if (f->l == 1)
+ abort();
+ exit(0);
+}
+static struct foos *getfoo(void)
+{ return (struct foos *)&foo; }