From c752146f9ef4ebcf22570612ba7838f539ddcd98 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 5 Dec 2010 11:31:09 +0000 Subject: [PATCH] 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 From-SVN: r167472 --- gcc/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/vect/pr46663.c | 14 ++++++++++++++ gcc/tree-vect-patterns.c | 3 +++ 4 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/vect/pr46663.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85c1deebd6e8..3163042f9373 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-12-05 Richard Guenther + Ira Rosen + + PR tree-optimization/46663 + * tree-vect-patterns.c (vect_recog_pow_pattern): Check that + FUNCTION_DECL exists and that it's a builtin. + 2010-11-29 Eric Botcazou PR rtl-optimization/46337 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 70000a24f844..fec8325b1bf3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-12-05 Richard Guenther + Ira Rosen + + PR tree-optimization/46663 + * gcc.dg/vect/pr46663.c: New test. + 2010-11-28 Eric Botcazou * gnat.dg/aliasing2.adb (dg-final): Robustify pattern matching. diff --git a/gcc/testsuite/gcc.dg/vect/pr46663.c b/gcc/testsuite/gcc.dg/vect/pr46663.c new file mode 100644 index 000000000000..42a1ffbbc4b7 --- /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 8486775ab775..1515318bbc1f 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -475,6 +475,9 @@ vect_recog_pow_pattern (gimple last_stmt, tree *type_in, tree *type_out) type = gimple_expr_type (last_stmt); 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: -- 2.47.2