diff mbox

Properly build integer constants

Message ID alpine.LNX.2.00.1104222126220.810@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener April 22, 2011, 7:27 p.m. UTC
There is a scary comment before build_int_cst_type why build_int_cst
can't be sane.  Fortunately it is not true.  If it were there would
be other code to be fixed.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2011-04-22  Richard Guenther  <rguenther@suse.de>

	* tree.c (build_int_cst): Properly create canonicalized integer
	constants.
	(build_int_cst_type): Remove scary comments.

Comments

Jakub Jelinek April 22, 2011, 7:47 p.m. UTC | #1
On Fri, Apr 22, 2011 at 09:27:50PM +0200, Richard Guenther wrote:
> There is a scary comment before build_int_cst_type why build_int_cst
> can't be sane.  Fortunately it is not true.  If it were there would
> be other code to be fixed.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

http://gcc.gnu.org/ml/gcc-patches/2004-08/msg02297.html
suggests that at least back then the old semantics of build_int_cst
was needed in round_up and build_prim_array_type.

> 2011-04-22  Richard Guenther  <rguenther@suse.de>
> 
> 	* tree.c (build_int_cst): Properly create canonicalized integer
> 	constants.
> 	(build_int_cst_type): Remove scary comments.

	Jakub
H.J. Lu April 24, 2011, 3:11 p.m. UTC | #2
On Fri, Apr 22, 2011 at 12:27 PM, Richard Guenther <rguenther@suse.de> wrote:
>
> There is a scary comment before build_int_cst_type why build_int_cst
> can't be sane.  Fortunately it is not true.  If it were there would
> be other code to be fixed.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
>
> Richard.
>
> 2011-04-22  Richard Guenther  <rguenther@suse.de>
>
>        * tree.c (build_int_cst): Properly create canonicalized integer
>        constants.
>        (build_int_cst_type): Remove scary comments.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48753
H.J. Lu May 3, 2011, 3:07 a.m. UTC | #3
On Sun, Apr 24, 2011 at 8:11 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Fri, Apr 22, 2011 at 12:27 PM, Richard Guenther <rguenther@suse.de> wrote:
>>
>> There is a scary comment before build_int_cst_type why build_int_cst
>> can't be sane.  Fortunately it is not true.  If it were there would
>> be other code to be fixed.
>>
>> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
>>
>> Richard.
>>
>> 2011-04-22  Richard Guenther  <rguenther@suse.de>
>>
>>        * tree.c (build_int_cst): Properly create canonicalized integer
>>        constants.
>>        (build_int_cst_type): Remove scary comments.
>>
>
> This caused:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48753
>

This also caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48846
diff mbox

Patch

Index: gcc/tree.c
===================================================================
--- gcc/tree.c	(revision 172832)
+++ gcc/tree.c	(working copy)
@@ -1004,7 +1004,7 @@  copy_list (tree list)
 }
 
 
-/* Create an INT_CST node with a LOW value sign extended.  */
+/* Create an INT_CST node with a LOW value sign extended to TYPE.  */
 
 tree
 build_int_cst (tree type, HOST_WIDE_INT low)
@@ -1013,17 +1013,10 @@  build_int_cst (tree type, HOST_WIDE_INT
   if (!type)
     type = integer_type_node;
 
-  return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
+  return double_int_to_tree (type, shwi_to_double_int (low));
 }
 
-/* Create an INT_CST node with a LOW value in TYPE.  The value is sign extended
-   if it is negative.  This function is similar to build_int_cst, but
-   the extra bits outside of the type precision are cleared.  Constants
-   with these extra bits may confuse the fold so that it detects overflows
-   even in cases when they do not occur, and in general should be avoided.
-   We cannot however make this a default behavior of build_int_cst without
-   more intrusive changes, since there are parts of gcc that rely on the extra
-   precision of the integer constants.  */
+/* Create an INT_CST node with a LOW value sign extended to TYPE.  */
 
 tree
 build_int_cst_type (tree type, HOST_WIDE_INT low)