From: Richard Stallman Date: Fri, 11 Sep 1992 08:52:38 +0000 (+0000) Subject: (finish_struct): Don't assume that a target integer X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2d7243898e983c8df7abc4b51cfe9ef23327f0a9;p=gcc.git (finish_struct): Don't assume that a target integer fits in a HOST_WIDE_INT when checking bit-field widths. From-SVN: r2105 --- diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 6a505395f6d..59d0c52491a 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -4826,23 +4826,23 @@ finish_struct (t, fieldlist) /* Detect and ignore out of range field width. */ if (DECL_INITIAL (x)) { - register int width = TREE_INT_CST_LOW (DECL_INITIAL (x)); + unsigned HOST_WIDE_INT width = TREE_INT_CST_LOW (DECL_INITIAL (x)); - if (width < 0) + if (tree_int_cst_lt (DECL_INITIAL (x), integer_zero_node)) { DECL_INITIAL (x) = NULL; error_with_decl (x, "negative width in bit-field `%s'"); } - else if (width == 0 && DECL_NAME (x) != 0) + else if (TREE_INT_CST_HIGH (DECL_INITIAL (x)) != 0 + || width > TYPE_PRECISION (TREE_TYPE (x))) { - error_with_decl (x, "zero width for bit-field `%s'"); DECL_INITIAL (x) = NULL; + pedwarn_with_decl (x, "width of `%s' exceeds its type"); } - else if (width > TYPE_PRECISION (TREE_TYPE (x)) - || TREE_INT_CST_HIGH (DECL_INITIAL (x)) != 0) + else if (width == 0 && DECL_NAME (x) != 0) { + error_with_decl (x, "zero width for bit-field `%s'"); DECL_INITIAL (x) = NULL; - pedwarn_with_decl (x, "width of `%s' exceeds its type"); } }