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
This commit is contained in:
parent
8b6f089bcb
commit
ab996409bc
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
13
gcc/testsuite/gcc.dg/torture/pr42667.c
Normal file
13
gcc/testsuite/gcc.dg/torture/pr42667.c
Normal file
@ -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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user