From aea625ddaee76c08abeb3d1eccd7bcd63dc455de Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 17 Feb 2006 17:05:46 +0100 Subject: re PR ada/26315 (ACATS failures c43208b c85006a c85006d cd92001) 2006-02-17 Eric Botcazou 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. From-SVN: r111183 --- gcc/ada/bindgen.adb | 8 +------- gcc/ada/decl.c | 1 + gcc/ada/misc.c | 1 + gcc/ada/utils2.c | 5 +++-- 4 files changed, 6 insertions(+), 9 deletions(-) (limited to 'gcc/ada') diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb index ab0f839..0b595fe 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 1a17c37..2144ff2 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 d1ff2c5..3c4e8cb 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 4f38e15..ee8dec5 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))) -- cgit v1.1