diff options
author | Richard Guenther <rguenther@suse.de> | 2010-01-10 19:37:45 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-01-10 19:37:45 +0000 |
commit | ab996409bcd1b433b9428fe1b4a5ca5b8e66e6e4 (patch) | |
tree | 65e7615616a5182e7423ac831a4eae0bcb5f6e58 /gcc | |
parent | 8b6f089bcbf20653a5a0e85d4390fe3b74e21bfc (diff) | |
download | gcc-ab996409bcd1b433b9428fe1b4a5ca5b8e66e6e4.zip gcc-ab996409bcd1b433b9428fe1b4a5ca5b8e66e6e4.tar.gz gcc-ab996409bcd1b433b9428fe1b4a5ca5b8e66e6e4.tar.bz2 |
re PR middle-end/42667 (internal compiler error: in insert_into_preds_of_block, at tree-ssa-pre.c:3146)
2010-01-10 Richard Guenther <rguenther@suse.de>
PR middle-end/42667
* builtins.c (fold_builtin_strlen): Add type argument and
convert the resulting length to it.
(fold_builtin_1): Adjust.
* gcc.dg/torture/pr42667.c: New testcase.
From-SVN: r155791
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/builtins.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr42667.c | 13 |
4 files changed, 29 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73263cd..8869f7f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-01-10 Richard Guenther <rguenther@suse.de> + + PR middle-end/42667 + * builtins.c (fold_builtin_strlen): Add type argument and + convert the resulting length to it. + (fold_builtin_1): Adjust. + 2010-01-09 Jakub Jelinek <jakub@redhat.com> * config/rs6000/rs6000.c (rs6000_emit_set_long_const): Shorten diff --git a/gcc/builtins.c b/gcc/builtins.c index 607117a..ac96934 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -135,7 +135,7 @@ static rtx expand_builtin_expect (tree, rtx); static tree fold_builtin_constant_p (tree); static tree fold_builtin_expect (location_t, tree, tree); static tree fold_builtin_classify_type (tree); -static tree fold_builtin_strlen (location_t, tree); +static tree fold_builtin_strlen (location_t, tree, tree); static tree fold_builtin_inf (location_t, tree, int); static tree fold_builtin_nan (tree, tree, int); static tree rewrite_call_expr (location_t, tree, int, tree, int, ...); @@ -6617,7 +6617,7 @@ fold_builtin_classify_type (tree arg) /* Fold a call to __builtin_strlen with argument ARG. */ static tree -fold_builtin_strlen (location_t loc, tree arg) +fold_builtin_strlen (location_t loc, tree type, tree arg) { if (!validate_arg (arg, POINTER_TYPE)) return NULL_TREE; @@ -6626,12 +6626,7 @@ fold_builtin_strlen (location_t loc, tree arg) tree len = c_strlen (arg, 0); if (len) - { - /* Convert from the internal "sizetype" type to "size_t". */ - if (size_type_node) - len = fold_convert_loc (loc, size_type_node, len); - return len; - } + return fold_convert_loc (loc, type, len); return NULL_TREE; } @@ -9659,7 +9654,7 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore) return fold_builtin_classify_type (arg0); case BUILT_IN_STRLEN: - return fold_builtin_strlen (loc, arg0); + return fold_builtin_strlen (loc, type, arg0); CASE_FLT_FN (BUILT_IN_FABS): return fold_builtin_fabs (loc, arg0, type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f3a033e..c2effe9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-01-10 Richard Guenther <rguenther@suse.de> + + PR middle-end/42667 + * gcc.dg/torture/pr42667.c: New testcase. + 2010-01-09 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/32489 diff --git a/gcc/testsuite/gcc.dg/torture/pr42667.c b/gcc/testsuite/gcc.dg/torture/pr42667.c new file mode 100644 index 0000000..eac8001 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr42667.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-w" } */ + +extern int strlen(const char *); +void WriteTextDots(int len); + +void OnDisplay(char * string) +{ + if (!string) + string = "(none)"; + WriteTextDots(strlen(string)); +} + |