summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/pr50017.c20
-rw-r--r--gcc/tree-vect-stmts.c11
4 files changed, 38 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 314efcdfdb4..d7df6315d18 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-18 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/50017
+ * tree-vect-stmts.c (vect_finish_stmt_generation): If gsi_stmt (*gsi)
+ is a debug stmt, use location of the first non-debug stmt after it.
+
2011-08-18 Richard Sandiford <richard.sandiford@linaro.org>
* config/arm/arm.c (arm_rtx_costs_1): Don't modify the costs of SET.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d47caaf9e08..0b09a0cca24 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,6 +2,9 @@
* g++.dg/plugin/decl_plugin.c: Include diagnostic.h.
+ PR debug/50017
+ * gcc.dg/pr50017.c: New test.
+
2011-08-18 Dodji Seketeli <dodji@redhat.com>
PR c++/45625
diff --git a/gcc/testsuite/gcc.dg/pr50017.c b/gcc/testsuite/gcc.dg/pr50017.c
new file mode 100644
index 00000000000..66bef007da1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr50017.c
@@ -0,0 +1,20 @@
+/* PR debug/50017 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -fcompare-debug" } */
+
+struct S { int r, i; };
+
+void
+foo (struct S *x, int y)
+{
+ int i;
+ for (i = 1; i < y; i++)
+ {
+ struct S a, b, c;
+ a = x[0];
+ b = x[i];
+ c.r = a.r * b.r - a.i * b.i;
+ c.i = a.r * b.i + a.i * b.r;
+ x[i] = c;
+ }
+}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index e00822b7ea4..c0ca2af8e80 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -1,5 +1,5 @@
/* Statement Analysis and Transformation for Vectorization
- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Dorit Naishlos <dorit@il.ibm.com>
and Ira Rosen <irar@il.ibm.com>
@@ -1419,6 +1419,7 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt,
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
bb_vec_info bb_vinfo = STMT_VINFO_BB_VINFO (stmt_info);
+ gimple_stmt_iterator si;
gcc_assert (gimple_code (stmt) != GIMPLE_LABEL);
@@ -1433,7 +1434,13 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt,
print_gimple_stmt (vect_dump, vec_stmt, 0, TDF_SLIM);
}
- gimple_set_location (vec_stmt, gimple_location (gsi_stmt (*gsi)));
+ si = *gsi;
+ if (is_gimple_debug (gsi_stmt (si)))
+ {
+ gsi_next_nondebug (&si);
+ gcc_assert (!gsi_end_p (si));
+ }
+ gimple_set_location (vec_stmt, gimple_location (gsi_stmt (si)));
}
/* Checks if CALL can be vectorized in type VECTYPE. Returns