aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-12-02 11:47:12 +0000
committerIra Rosen <irar@gcc.gnu.org>2010-12-02 11:47:12 +0000
commit52bd463c629b5c0c30b6c95c90aa8dc8199fc84e (patch)
tree192198bbf94e4e391a0d0d68c4409f9a811678b5 /gcc
parentbd632dbdf823bf17aecf95d52f0df5e732e9901a (diff)
downloadgcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.zip
gcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.tar.gz
gcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.tar.bz2
re PR tree-optimization/46663 (ICE: SIGSEGV in vect_recog_pow_pattern (gimple.h:2055) with -O -fexceptions -ftree-vectorize)
PR tree-optimization/46663 * tree-vect-patterns.c (vect_recog_pow_pattern): Check that FUNCTION_DECL exists and that it's a builtin. Co-Authored-By: Ira Rosen <irar@il.ibm.com> From-SVN: r167366
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr46663.c14
-rw-r--r--gcc/tree-vect-patterns.c3
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f4302dc..7d7e191 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-12-02 Richard Guenther <rguenther@suse.de>
+ Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/46663
+ * tree-vect-patterns.c (vect_recog_pow_pattern): Check that
+ FUNCTION_DECL exists and that it's a builtin.
+
2010-12-02 Jie Zhang <jie@codesourcery.com>
PR middle-end/46674
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d70e0b1..e0ca352 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-02 Richard Guenther <rguenther@suse.de>
+ Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/46663
+ * gcc.dg/vect/pr46663.c: New test.
+
2010-12-02 Jie Zhang <jie@codesourcery.com>
PR middle-end/46674
diff --git a/gcc/testsuite/gcc.dg/vect/pr46663.c b/gcc/testsuite/gcc.dg/vect/pr46663.c
new file mode 100644
index 0000000..42a1ffb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr46663.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-vectorize -fdump-tree-vect-details -fexceptions" } */
+
+typedef __attribute__ ((const)) int (*bart) (void);
+
+int foo (bart bar, int m)
+{
+ int i, j = 0;
+ for (i = 0; i < m; i++)
+ j += bar();
+ return j;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index b55bacb..d405304 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -472,6 +472,9 @@ vect_recog_pow_pattern (gimple last_stmt, tree *type_in, tree *type_out)
return NULL;
fn = gimple_call_fndecl (last_stmt);
+ if (fn == NULL_TREE || DECL_BUILT_IN_CLASS (fn) != BUILT_IN_NORMAL)
+ return NULL;
+
switch (DECL_FUNCTION_CODE (fn))
{
case BUILT_IN_POWIF: