diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2006-02-17 17:05:46 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2006-02-17 17:05:46 +0100 |
commit | aea625ddaee76c08abeb3d1eccd7bcd63dc455de (patch) | |
tree | 04e5ca2a80a1640835e53e495bd47c66b25f210d | |
parent | 69e6a03e46224219467e99564de4f370656931a5 (diff) | |
download | gcc-aea625ddaee76c08abeb3d1eccd7bcd63dc455de.zip gcc-aea625ddaee76c08abeb3d1eccd7bcd63dc455de.tar.gz gcc-aea625ddaee76c08abeb3d1eccd7bcd63dc455de.tar.bz2 |
re PR ada/26315 (ACATS failures c43208b c85006a c85006d cd92001)
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.
From-SVN: r111183
-rw-r--r-- | gcc/ada/bindgen.adb | 8 | ||||
-rw-r--r-- | gcc/ada/decl.c | 1 | ||||
-rw-r--r-- | gcc/ada/misc.c | 1 | ||||
-rw-r--r-- | gcc/ada/utils2.c | 5 |
4 files changed, 6 insertions, 9 deletions
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))) |