diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-17 16:05:46 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-02-17 16:05:46 +0000 |
commit | e2dcd12e2156395d0d855100f8117a8be2eaa280 (patch) | |
tree | 04e5ca2a80a1640835e53e495bd47c66b25f210d /gcc/ada | |
parent | 5f56d1ef81499d8559e41c49b8d9244c4c7ee578 (diff) | |
download | gcc-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.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 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))) |