From: Richard Guenther Date: Wed, 20 Feb 2008 17:25:52 +0000 (+0000) Subject: re PR middle-end/35265 (__builtin_popcount expansion bug) X-Git-Tag: releases/gcc-4.4.0~6393 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4cd8e76f1d5a3023e1faed30cef00270103c330d;p=thirdparty%2Fgcc.git re PR middle-end/35265 (__builtin_popcount expansion bug) 2008-02-20 Richard Guenther PR middle-end/35265 * builtins.c (validate_arg): If we want an INTEGER_TYPE, be happy with INTEGRAL_TYPE_P. * gcc.dg/builtins-66.c: New testcase. From-SVN: r132485 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5fa81dc782d6..495a4769a5a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-02-20 Richard Guenther + + PR middle-end/35265 + * builtins.c (validate_arg): If we want an INTEGER_TYPE, + be happy with INTEGRAL_TYPE_P. + 2008-02-20 Richard Guenther * fold-const.c (split_tree): Associate floatig-point expressions diff --git a/gcc/builtins.c b/gcc/builtins.c index 1c140508a533..5e6ebf5d116c 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -5192,6 +5192,7 @@ expand_builtin_fabs (tree exp, rtx target, rtx subtarget) return NULL_RTX; arg = CALL_EXPR_ARG (exp, 0); + CALL_EXPR_ARG (exp, 0) = arg = builtin_save_expr (arg); mode = TYPE_MODE (TREE_TYPE (arg)); op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL); return expand_abs (mode, op0, target, 0, safe_from_p (target, arg, 1)); @@ -10749,6 +10750,8 @@ validate_arg (const_tree arg, enum tree_code code) return false; else if (code == POINTER_TYPE) return POINTER_TYPE_P (TREE_TYPE (arg)); + else if (code == INTEGER_TYPE) + return INTEGRAL_TYPE_P (TREE_TYPE (arg)); return code == TREE_CODE (TREE_TYPE (arg)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8b9fb37624da..04c799fe178e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-02-20 Richard Guenther + + PR middle-end/35265 + * gcc.dg/builtins-66.c: New testcase. + 2008-02-20 Richard Guenther * gcc.dg/fold-reassoc-1.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/builtins-66.c b/gcc/testsuite/gcc.dg/builtins-66.c new file mode 100644 index 000000000000..87bea3f4209f --- /dev/null +++ b/gcc/testsuite/gcc.dg/builtins-66.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ + +enum { E0 = 0, E1 = 1, E2 = 2 } e; + +int +foo (void) +{ + return __builtin_popcount ((int) e); +} + +/* { dg-final { scan-assembler-not "__builtin_popcount" } } */