summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-04 17:49:17 +0000
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-04 17:49:17 +0000
commit8a451cb7b68a73723ea494825e291b67f52a9ea9 (patch)
tree2811bcbabc25bf4c477896b0136dd5dc1b916d3b
parent11ddef763bf193d50bc700d37c6c8d788a57f67d (diff)
downloadppe42-gcc-8a451cb7b68a73723ea494825e291b67f52a9ea9.tar.gz
ppe42-gcc-8a451cb7b68a73723ea494825e291b67f52a9ea9.zip
2005-07-04 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/22279 * tree-ssa-structalias.c (offset_overlaps_with_access): Use correct operator. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101603 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr22279.C43
-rw-r--r--gcc/tree-ssa-structalias.c2
3 files changed, 51 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e8c93fd6b6b..0bbe692aa8e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2005-07-04 Daniel Berlin <dberlin@dberlin.org>
+
+ Fix PR tree-optimization/22279
+
+ * tree-ssa-structalias.c (offset_overlaps_with_access): Use
+ correct operator.
+
2005-07-04 J"orn Rennecke <joern.rennecke@st.com>
* sh.c (output_ieee_ccmpeq): Replace "\\;" with "\n\t".
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr22279.C b/gcc/testsuite/g++.dg/tree-ssa/pr22279.C
new file mode 100644
index 00000000000..0e17f08ecde
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr22279.C
@@ -0,0 +1,43 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct string
+{
+ long long _M_p;
+ long long i;
+ string();
+ int begin();
+ int end();
+ string(int, int);
+};
+struct symbol
+{
+ int type;
+ string name;
+ long long raw_name;
+ long long demangled_name;
+ long long version_name;
+ int version_status;
+ int status;
+ void init();
+};
+void symbol::init() { name = string(); }
+struct pair
+{
+ symbol first;
+ symbol second;
+ pair(const symbol& __a, const symbol& __b) : first(__a), second(__b) { }
+};
+struct vector
+{
+ void push_back(const pair& __x);
+};
+/* This ends up with two RHS deref copies, and we need to get the offsets right on them. */
+void f(vector incompatible)
+{
+ symbol base;
+ incompatible.push_back(pair(base, base));
+}
+
+
+
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 06adb3ec602..6db77b77e30 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -1951,7 +1951,7 @@ offset_overlaps_with_access (const unsigned HOST_WIDE_INT fieldpos,
{
if (fieldpos == accesspos && fieldsize == accesssize)
return true;
- if (accesspos >= fieldpos && accesspos <= (fieldpos + fieldsize))
+ if (accesspos >= fieldpos && accesspos < (fieldpos + fieldsize))
return true;
if (accesspos < fieldpos && (accesspos + accesssize > fieldpos))
return true;
OpenPOWER on IntegriCloud