aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-10-28 15:43:04 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2009-10-28 15:43:04 +0100
commitf46835f5ad524deb0ad74cefb74b0494544f59c2 (patch)
treee196390e6f4a478aebda4da5f5159575f483cafa /gcc
parent6ac719d38e35eb21551a5e006d11fb7e71a97260 (diff)
downloadgcc-f46835f5ad524deb0ad74cefb74b0494544f59c2.zip
gcc-f46835f5ad524deb0ad74cefb74b0494544f59c2.tar.gz
gcc-f46835f5ad524deb0ad74cefb74b0494544f59c2.tar.bz2
re PR debug/41801 (VTA: ICE in loc_cmp.)
PR debug/41801 * builtins.c (get_builtin_sync_mem): Expand loc in ptr_mode, call convert_memory_address on addr. * g++.dg/ext/sync-3.C: New test. From-SVN: r153669
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/builtins.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/ext/sync-3.C21
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e6cb0ee..dccf36f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -4,6 +4,10 @@
vt_expand_loc unnecessarily when location is not a register nor
memory.
+ PR debug/41801
+ * builtins.c (get_builtin_sync_mem): Expand loc in ptr_mode,
+ call convert_memory_address on addr.
+
PR target/41762
* config/i386/i386.c (ix86_pic_register_p): Don't call
rtx_equal_for_cselib_p for VALUEs discarded as useless.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 1243d72..0cb2bd7 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5656,7 +5656,8 @@ get_builtin_sync_mem (tree loc, enum machine_mode mode)
{
rtx addr, mem;
- addr = expand_expr (loc, NULL_RTX, Pmode, EXPAND_SUM);
+ addr = expand_expr (loc, NULL_RTX, ptr_mode, EXPAND_SUM);
+ addr = convert_memory_address (Pmode, addr);
/* Note that we explicitly do not want any alias information for this
memory, so that we kill all other live memories. Otherwise we don't
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a1e4668..747c81b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2009-10-28 Jakub Jelinek <jakub@redhat.com>
+ PR debug/41801
+ * g++.dg/ext/sync-3.C: New test.
+
PR target/41762
* gcc.dg/pr41762.c: New test.
diff --git a/gcc/testsuite/g++.dg/ext/sync-3.C b/gcc/testsuite/g++.dg/ext/sync-3.C
new file mode 100644
index 0000000..99faac7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/sync-3.C
@@ -0,0 +1,21 @@
+// PR debug/41801
+// { dg-do compile }
+// { dg-options "-O2 -g" }
+
+struct T
+{
+ void
+ foo () volatile
+ {
+ __sync_lock_release (&t);
+ __sync_synchronize ();
+ }
+ bool t;
+};
+
+int
+main ()
+{
+ T t = { false };
+ t.foo ();
+}