summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-17 16:05:46 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-17 16:05:46 +0000
commite2dcd12e2156395d0d855100f8117a8be2eaa280 (patch)
tree04e5ca2a80a1640835e53e495bd47c66b25f210d /gcc/ada
parent5f56d1ef81499d8559e41c49b8d9244c4c7ee578 (diff)
downloadgcc-e2dcd12e2156395d0d855100f8117a8be2eaa280.tar.gz
2006-02-17 Eric Botcazou <botcazou@adacore.com>
PR ada/26315 * utils2.c (find_common_type): If both input types are BLKmode and have the same constant size, keep using the first one. * bindgen.adb: (Gen_Versions_Ada): Revert previous workaround. * decl.c (gnat_to_gnu_entity): Only check TREE_OVERFLOW for a constant. * misc.c (gnat_handle_option): New case for -Woverlength-strings. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111183 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/bindgen.adb8
-rw-r--r--gcc/ada/decl.c1
-rw-r--r--gcc/ada/misc.c1
-rw-r--r--gcc/ada/utils2.c5
4 files changed, 6 insertions, 9 deletions
diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb
index ab0f839c4a8..0b595fe044c 100644
--- a/gcc/ada/bindgen.adb
+++ b/gcc/ada/bindgen.adb
@@ -2538,13 +2538,7 @@ package body Bindgen is
end loop;
WBI ("");
-
- -- We used to have more complex code: Ubuf := "u00000";
- -- which was being miscompiled, so use simpler code instead:
-
- for J in Ubuf'First + 1 .. Ubuf'Last loop
- Ubuf (J) := '0';
- end loop;
+ Ubuf := "u00000";
for U in Units.First .. Units.Last loop
Increment_Ubuf;
diff --git a/gcc/ada/decl.c b/gcc/ada/decl.c
index 1a17c37540e..2144ff20802 100644
--- a/gcc/ada/decl.c
+++ b/gcc/ada/decl.c
@@ -3435,6 +3435,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
a function that returns that type. This usage doesn't make
sense anyway, so give an error here. */
if (TYPE_SIZE_UNIT (gnu_return_type)
+ && TREE_CONSTANT (TYPE_SIZE_UNIT (gnu_return_type))
&& TREE_OVERFLOW (TYPE_SIZE_UNIT (gnu_return_type)))
{
post_error ("cannot return type whose size overflows",
diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c
index d1ff2c5df5a..3c4e8cba33d 100644
--- a/gcc/ada/misc.c
+++ b/gcc/ada/misc.c
@@ -286,6 +286,7 @@ gnat_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED)
case OPT_Wvariadic_macros:
case OPT_Wold_style_definition:
case OPT_Wmissing_format_attribute:
+ case OPT_Woverlength_strings:
break;
/* This is handled by the front-end. */
diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c
index 4f38e15fdf3..ee8dec57d43 100644
--- a/gcc/ada/utils2.c
+++ b/gcc/ada/utils2.c
@@ -232,9 +232,10 @@ find_common_type (tree t1, tree t2)
else if (TYPE_MODE (t2) != BLKmode)
return t2;
- /* If both types have constant size, use the smaller one. */
+ /* If both types have constant size, use the smaller one. Keep returning
+ T1 if we have a tie, to be consistent with the other cases. */
if (TREE_CONSTANT (TYPE_SIZE (t1)) && TREE_CONSTANT (TYPE_SIZE (t2)))
- return tree_int_cst_lt (TYPE_SIZE (t1), TYPE_SIZE (t2)) ? t1 : t2;
+ return tree_int_cst_lt (TYPE_SIZE (t2), TYPE_SIZE (t1)) ? t2 : t1;
/* Otherwise, if either type has a constant size, use it. */
else if (TREE_CONSTANT (TYPE_SIZE (t1)))