Commit 73ca9fb5 by Martin Sebor Committed by Martin Sebor

tree.h (tree_to_shwi): Add attribute nonnull and pure.

gcc/ChangeLog:

	* tree.h (tree_to_shwi): Add attribute nonnull and pure.
	(tree_to_poly_int64, tree_to_uhwi, tree_to_poly_uint64): Same.
	(int_fits_type_p): Same.

gcc/ada/ChangeLog:

	* gcc-interface/utils.c (make_packable_type): Introduce a temporary
	to avoid -Wnonnull.
	(unchecked_convert): Same.

From-SVN: r264680
parent f20ac637
2018-09-27 Martin Sebor <msebor@redhat.com>
* tree.h (tree_to_shwi): Add attribute nonnull and pure.
(tree_to_poly_int64, tree_to_uhwi, tree_to_poly_uint64): Same.
(int_fits_type_p): Same.
2018-09-27 Uros Bizjak <ubizjak@gmail.com> 2018-09-27 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (FPCR_REG): Remove. * config/i386/i386.md (FPCR_REG): Remove.
......
2018-09-27 Martin Sebor <msebor@redhat.com>
* gcc-interface/utils.c (make_packable_type): Introduce a temporary
to avoid -Wnonnull.
(unchecked_convert): Same.
2018-09-26 Elisa Barboni <barboni@adacore.com> 2018-09-26 Elisa Barboni <barboni@adacore.com>
* sem_prag.adb (Check_Refined_Global_Item): Improve error * sem_prag.adb (Check_Refined_Global_Item): Improve error
......
...@@ -990,15 +990,16 @@ make_packable_type (tree type, bool in_record, unsigned int max_align) ...@@ -990,15 +990,16 @@ make_packable_type (tree type, bool in_record, unsigned int max_align)
} }
else else
{ {
tree type_size = TYPE_ADA_SIZE (type);
/* Do not try to shrink the size if the RM size is not constant. */ /* Do not try to shrink the size if the RM size is not constant. */
if (TYPE_CONTAINS_TEMPLATE_P (type) if (TYPE_CONTAINS_TEMPLATE_P (type)
|| !tree_fits_uhwi_p (TYPE_ADA_SIZE (type))) || !tree_fits_uhwi_p (type_size))
return type; return type;
/* Round the RM size up to a unit boundary to get the minimal size /* Round the RM size up to a unit boundary to get the minimal size
for a BLKmode record. Give up if it's already the size and we for a BLKmode record. Give up if it's already the size and we
don't need to lower the alignment. */ don't need to lower the alignment. */
new_size = tree_to_uhwi (TYPE_ADA_SIZE (type)); new_size = tree_to_uhwi (type_size);
new_size = (new_size + BITS_PER_UNIT - 1) & -BITS_PER_UNIT; new_size = (new_size + BITS_PER_UNIT - 1) & -BITS_PER_UNIT;
if (new_size == size && (max_align == 0 || align <= max_align)) if (new_size == size && (max_align == 0 || align <= max_align))
return type; return type;
...@@ -5307,20 +5308,21 @@ unchecked_convert (tree type, tree expr, bool notrunc_p) ...@@ -5307,20 +5308,21 @@ unchecked_convert (tree type, tree expr, bool notrunc_p)
to its size, sign- or zero-extend the result. But we need not do this to its size, sign- or zero-extend the result. But we need not do this
if the input is also an integral type and both are unsigned or both are if the input is also an integral type and both are unsigned or both are
signed and have the same precision. */ signed and have the same precision. */
tree type_rm_size;
if (!notrunc_p if (!notrunc_p
&& INTEGRAL_TYPE_P (type) && INTEGRAL_TYPE_P (type)
&& !(code == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type)) && !(code == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (type))
&& TYPE_RM_SIZE (type) && (type_rm_size = TYPE_RM_SIZE (type))
&& tree_int_cst_compare (TYPE_RM_SIZE (type), TYPE_SIZE (type)) < 0 && tree_int_cst_compare (type_rm_size, TYPE_SIZE (type)) < 0
&& !(INTEGRAL_TYPE_P (etype) && !(INTEGRAL_TYPE_P (etype)
&& type_unsigned_for_rm (type) == type_unsigned_for_rm (etype) && type_unsigned_for_rm (type) == type_unsigned_for_rm (etype)
&& (type_unsigned_for_rm (type) && (type_unsigned_for_rm (type)
|| tree_int_cst_compare (TYPE_RM_SIZE (type), || tree_int_cst_compare (type_rm_size,
TYPE_RM_SIZE (etype) TYPE_RM_SIZE (etype)
? TYPE_RM_SIZE (etype) ? TYPE_RM_SIZE (etype)
: TYPE_SIZE (etype)) == 0))) : TYPE_SIZE (etype)) == 0)))
{ {
if (integer_zerop (TYPE_RM_SIZE (type))) if (integer_zerop (type_rm_size))
expr = build_int_cst (type, 0); expr = build_int_cst (type, 0);
else else
{ {
...@@ -5330,7 +5332,7 @@ unchecked_convert (tree type, tree expr, bool notrunc_p) ...@@ -5330,7 +5332,7 @@ unchecked_convert (tree type, tree expr, bool notrunc_p)
tree shift_expr tree shift_expr
= convert (base_type, = convert (base_type,
size_binop (MINUS_EXPR, size_binop (MINUS_EXPR,
TYPE_SIZE (type), TYPE_RM_SIZE (type))); TYPE_SIZE (type), type_rm_size));
expr expr
= convert (type, = convert (type,
build_binary_op (RSHIFT_EXPR, base_type, build_binary_op (RSHIFT_EXPR, base_type,
......
...@@ -4231,16 +4231,23 @@ extern tree purpose_member (const_tree, tree); ...@@ -4231,16 +4231,23 @@ extern tree purpose_member (const_tree, tree);
extern bool vec_member (const_tree, vec<tree, va_gc> *); extern bool vec_member (const_tree, vec<tree, va_gc> *);
extern tree chain_index (int, tree); extern tree chain_index (int, tree);
/* Arguments may be null. */
extern int tree_int_cst_equal (const_tree, const_tree); extern int tree_int_cst_equal (const_tree, const_tree);
/* The following predicates are safe to call with a null argument. */
extern bool tree_fits_shwi_p (const_tree) ATTRIBUTE_PURE; extern bool tree_fits_shwi_p (const_tree) ATTRIBUTE_PURE;
extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE; extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE;
extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE; extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE;
extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE; extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE;
extern HOST_WIDE_INT tree_to_shwi (const_tree);
extern poly_int64 tree_to_poly_int64 (const_tree); extern HOST_WIDE_INT tree_to_shwi (const_tree)
extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree); ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
extern poly_uint64 tree_to_poly_uint64 (const_tree); extern poly_int64 tree_to_poly_int64 (const_tree)
ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree)
ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
extern poly_uint64 tree_to_poly_uint64 (const_tree)
ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
#if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003) #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
tree_to_shwi (const_tree t) tree_to_shwi (const_tree t)
...@@ -4893,7 +4900,8 @@ extern bool really_constant_p (const_tree); ...@@ -4893,7 +4900,8 @@ extern bool really_constant_p (const_tree);
extern bool ptrdiff_tree_p (const_tree, poly_int64_pod *); extern bool ptrdiff_tree_p (const_tree, poly_int64_pod *);
extern bool decl_address_invariant_p (const_tree); extern bool decl_address_invariant_p (const_tree);
extern bool decl_address_ip_invariant_p (const_tree); extern bool decl_address_ip_invariant_p (const_tree);
extern bool int_fits_type_p (const_tree, const_tree); extern bool int_fits_type_p (const_tree, const_tree)
ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2) ATTRIBUTE_PURE;
#ifndef GENERATOR_FILE #ifndef GENERATOR_FILE
extern void get_type_static_bounds (const_tree, mpz_t, mpz_t); extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment