diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-10-28 15:43:04 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-10-28 15:43:04 +0100 |
commit | f46835f5ad524deb0ad74cefb74b0494544f59c2 (patch) | |
tree | e196390e6f4a478aebda4da5f5159575f483cafa /gcc | |
parent | 6ac719d38e35eb21551a5e006d11fb7e71a97260 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/builtins.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/sync-3.C | 21 |
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 (); +} |