diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2007-02-15 04:24:50 +0000 |
---|---|---|
committer | Alexandre Oliva <aoliva@gcc.gnu.org> | 2007-02-15 04:24:50 +0000 |
commit | 45f94ec73059ead706d765e6ab20c081dcc252d3 (patch) | |
tree | cb805c480dc5261c888d2381b9a4b32e576a4729 /gcc/testsuite | |
parent | db9e0d2af65c2caafd568536b3613e7e729ab006 (diff) | |
download | gcc-45f94ec73059ead706d765e6ab20c081dcc252d3.zip gcc-45f94ec73059ead706d765e6ab20c081dcc252d3.tar.gz gcc-45f94ec73059ead706d765e6ab20c081dcc252d3.tar.bz2 |
tree-sra.c (instantiate_missing_elements): Canonicalize bit-field types.
gcc/ChangeLog:
* tree-sra.c (instantiate_missing_elements): Canonicalize
bit-field types.
(sra_build_assignment): New.
(generate_copy_inout, generate_element_copy,
generate_element_zero, generate_one_element_init): Use it.
gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/sra-1.C: New.
From-SVN: r121980
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-ssa/sra-1.C | 29 |
2 files changed, 37 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c93af2..bd936c0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,13 @@ 2007-02-15 Alexandre Oliva <aoliva@redhat.com> + * g++.dg/tree-ssa/sra-1.C: New. + +2007-02-15 Alexandre Oliva <aoliva@redhat.com> + + * g++.dg/tree-ssa/sra-1.C: New. + +2007-02-15 Alexandre Oliva <aoliva@redhat.com> + * g++.dg/ext/interface4.C, g++.dg/ext/interface4.h: New. 2007-02-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> diff --git a/gcc/testsuite/g++.dg/tree-ssa/sra-1.C b/gcc/testsuite/g++.dg/tree-ssa/sra-1.C new file mode 100644 index 0000000..e3e3918 --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-ssa/sra-1.C @@ -0,0 +1,29 @@ +/* https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=223576 */ + +/* SRA failed to canonicalize bit-field types, introducing type + mismatches. */ + +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct A +{ + int a:16; + /* These dummy bit-fields are here to prevent GCC 4.2+ from merging + the bit-field compares into a single word compare, which disables + SRA. */ + int a2:16; + int a3:16; + int a4:16; + int b:8; + bool operator==(A const x) const + { + return (this->a == x.a && this->b == x.b); + } +}; + +bool +foo (A const x, A const y) +{ + return x == y; +} |