From 0d906a5f369e6c35c32c7f5489dd4027c823973e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 13 Aug 1998 15:26:46 +0000 Subject: [PATCH] c-typeck.c (initializer_constant_valid_p): Allow conversion of 0 of any size to a pointer. * c-typeck.c (initializer_constant_valid_p): Allow conversion of 0 of any size to a pointer. From-SVN: r21697 --- gcc/ChangeLog | 7 ++++++- gcc/c-typeck.c | 17 +++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bbe6a7394a3..35e2e6cd909 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Aug 13 15:24:48 1998 Jason Merrill + + * c-typeck.c (initializer_constant_valid_p): Allow conversion of 0 + of any size to a pointer. + Thu Aug 13 12:53:13 1998 Jim Wilson * i386/winnt.c (i386_pe_asm_file_end): Check TREE_SYMBOL_REFERENCED. @@ -567,7 +572,7 @@ Tue Jul 28 22:31:12 1998 Craig Burley SUBREG, MEM. * rtlanal.c (replace_rtx): Prohibit replaces in CONST_DOUBLE. -Tue Jul 28 11:33:09 1998 Mark Mitchell + * cplus-dem.c (type_kind_t): New type. (demangle_template_value_parm): Add type_kind_t parameter. Rely diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 4ccc1a3a5e1..0a1f490577c 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -4423,13 +4423,18 @@ initializer_constant_valid_p (value, endtype) return initializer_constant_valid_p (TREE_OPERAND (value, 0), endtype); - /* Likewise conversions from int to pointers. */ + /* Likewise conversions from int to pointers, but also allow + conversions from 0. */ if (TREE_CODE (TREE_TYPE (value)) == POINTER_TYPE - && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE - && (TYPE_PRECISION (TREE_TYPE (value)) - <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0))))) - return initializer_constant_valid_p (TREE_OPERAND (value, 0), - endtype); + && TREE_CODE (TREE_TYPE (TREE_OPERAND (value, 0))) == INTEGER_TYPE) + { + if (integer_zerop (TREE_OPERAND (value, 0))) + return null_pointer_node; + else if (TYPE_PRECISION (TREE_TYPE (value)) + <= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (value, 0)))) + return initializer_constant_valid_p (TREE_OPERAND (value, 0), + endtype); + } /* Allow conversions to union types if the value inside is okay. */ if (TREE_CODE (TREE_TYPE (value)) == UNION_TYPE) -- 2.30.2