+2007-03-30 Rafael Avila de Espindola <espindola@google.com>
+
+ * tree.h (get_signed_or_unsigned_type): New.
+ * fold-const.c (operand_equal_for_comparison_p): Use
+ get_signed_or_unsigned_type instead of
+ lang_hooks.types.signed_or_unsigned_type.
+ * expr.c (store_expr): Ditto.
+ * langhooks.c (get_signed_or_unsigned_type): New.
+ (lhd_signed_or_unsigned_type): New.
+ * langhooks.h (lhd_signed_or_unsigned_type): New.
+ * langhooks-def.h (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Define.
+
2007-03-30 Richard Henderson <rth@redhat.com>
* tree-ssa-loop-ivopts.c: Include target.h.
+2007-03-30 Rafael Avila de Espindola <espindola@google.com>
+
+ * trans.c (Attribute_to_gnu): Use get_signed_or_unsigned_type
+ instead of gnat_signed_or_unsigned_type.
+ * utils.c (gnat_signed_or_unsigned_type): Remove.
+ * misc.c (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Remove
+ * gigi.h (gnat_signed_or_unsigned_type): Remove
+
2007-03-09 Roger Sayle <roger@eyesopen.com>
* cuintp.c (UI_To_gnu): Use fold_buildN calls instead of calling
/* Return the signed version of a TYPE_NODE, a scalar type. */
extern tree gnat_signed_type (tree type_node);
-/* Return a type the same as TYPE except unsigned or signed according to
- UNSIGNEDP. */
-extern tree gnat_signed_or_unsigned_type (int unsignedp, tree type);
-
/* Create an expression whose value is that of EXPR,
converted to type TYPE. The TREE_TYPE of the value
is always TYPE. This function implements all reasonable
#define LANG_HOOKS_SIGNED_TYPE gnat_signed_type
#undef LANG_HOOKS_UNSIGNED_TYPE
#define LANG_HOOKS_UNSIGNED_TYPE gnat_unsigned_type
-#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
-#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gnat_signed_or_unsigned_type
#undef LANG_HOOKS_ATTRIBUTE_TABLE
#define LANG_HOOKS_ATTRIBUTE_TABLE gnat_internal_attribute_table
#undef LANG_HOOKS_BUILTIN_FUNCTION
/* 'Length or 'Range_Length. */
{
tree gnu_compute_type
- = gnat_signed_or_unsigned_type (0,
+ = get_signed_or_unsigned_type (0,
get_base_type (gnu_result_type));
gnu_result
return type;
}
-/* Return a type the same as TYPE except unsigned or signed according to
- UNSIGNEDP. */
-
-tree
-gnat_signed_or_unsigned_type (int unsignedp, tree type)
-{
- if (!INTEGRAL_TYPE_P (type) || TYPE_UNSIGNED (type) == unsignedp)
- return type;
- else
- return gnat_type_for_size (TYPE_PRECISION (type), unsignedp);
-}
\f
/* EXP is an expression for the size of an object. If this size contains
discriminant references, replace them with the maximum (if MAX_P) or
if (TYPE_UNSIGNED (TREE_TYPE (exp))
!= SUBREG_PROMOTED_UNSIGNED_P (target))
exp = fold_convert
- (lang_hooks.types.signed_or_unsigned_type
+ (get_signed_or_unsigned_type
(SUBREG_PROMOTED_UNSIGNED_P (target), TREE_TYPE (exp)), exp);
exp = fold_convert (lang_hooks.types.type_for_mode
/* Make sure shorter operand is extended the right way
to match the longer operand. */
- primarg1 = fold_convert (lang_hooks.types.signed_or_unsigned_type
+ primarg1 = fold_convert (get_signed_or_unsigned_type
(unsignedp1, TREE_TYPE (primarg1)), primarg1);
if (operand_equal_p (arg0, fold_convert (type, primarg1), 0))
+2007-03-30 Rafael Avila de Espindola <espindola@google.com>
+
+ * trans-types.c (gfc_signed_or_unsigned_type): Remove.
+ (gfc_unsigned_type): Use get_signed_or_unsigned_type instead of
+ gfc_signed_or_unsigned_type.
+ (gfc_signed_type): Ditto.
+ * trans-types.h (gfc_signed_or_unsigned_type): Remove.
+ * f95-lang.c (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Remove.
+
2007-03-30 Tobias Schlüter <tobi@gcc.gnu.org>
* symbol.c (gfc_find_gsymbol): Simplify, don't unconditionally
#undef LANG_HOOKS_TYPE_FOR_SIZE
#undef LANG_HOOKS_UNSIGNED_TYPE
#undef LANG_HOOKS_SIGNED_TYPE
-#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
#undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
#undef LANG_HOOKS_CLEAR_BINDING_STACK
#undef LANG_HOOKS_GET_ALIAS_SET
#define LANG_HOOKS_TYPE_FOR_SIZE gfc_type_for_size
#define LANG_HOOKS_UNSIGNED_TYPE gfc_unsigned_type
#define LANG_HOOKS_SIGNED_TYPE gfc_signed_type
-#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE gfc_signed_or_unsigned_type
#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION gfc_expand_function
#define LANG_HOOKS_CLEAR_BINDING_STACK gfc_clear_binding_stack
#define LANG_HOOKS_GET_ALIAS_SET gfc_get_alias_set
return NULL_TREE;
}
-/* Return a type the same as TYPE except unsigned or
- signed according to UNSIGNEDP. */
-
-tree
-gfc_signed_or_unsigned_type (int unsignedp, tree type)
-{
- if (TREE_CODE (type) != INTEGER_TYPE || TYPE_UNSIGNED (type) == unsignedp)
- return type;
- else
- return gfc_type_for_size (TYPE_PRECISION (type), unsignedp);
-}
-
/* Return an unsigned type the same as TYPE in other respects. */
tree
gfc_unsigned_type (tree type)
{
- return gfc_signed_or_unsigned_type (1, type);
+ return get_signed_or_unsigned_type (1, type);
}
/* Return a signed type the same as TYPE in other respects. */
tree
gfc_signed_type (tree type)
{
- return gfc_signed_or_unsigned_type (0, type);
+ return get_signed_or_unsigned_type (0, type);
}
#include "gt-fortran-trans-types.h"
tree gfc_type_for_mode (enum machine_mode, int);
tree gfc_unsigned_type (tree);
tree gfc_signed_type (tree);
-tree gfc_signed_or_unsigned_type (int, tree);
tree gfc_get_element_type (tree);
tree gfc_get_array_type_bounds (tree, int, tree *, tree *, int);
+2007-03-30 Rafael Avila de Espindola <espindola@google.com>
+
+ * typeck.c (java_signed_or_unsigned_type): Removed.
+ (java_signed_type): use get_signed_or_unsigned_type instead of
+ java_signed_or_unsigned_type.
+ (java_unsigned_type): Ditto.
+ * lang.c (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): Removed.
+ * java-tree.h (java_signed_or_unsigned_type): Removed.
+
2007-03-26 Tom Tromey <tromey@redhat.com>
* Make-lang.in (JAVA_MANFILES): Removed grmiregistry.1.
extern tree java_type_for_size (unsigned int, int);
extern tree java_unsigned_type (tree);
extern tree java_signed_type (tree);
-extern tree java_signed_or_unsigned_type (int, tree);
extern tree java_truthvalue_conversion (tree);
extern void add_assume_compiled (const char *, int);
extern void add_enable_assert (const char *, int);
#define LANG_HOOKS_SIGNED_TYPE java_signed_type
#undef LANG_HOOKS_UNSIGNED_TYPE
#define LANG_HOOKS_UNSIGNED_TYPE java_unsigned_type
-#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
-#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE java_signed_or_unsigned_type
#undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN
#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN java_dump_tree
return 0;
}
-/* Return a type the same as TYPE except unsigned or
- signed according to UNSIGNEDP. */
-
-tree
-java_signed_or_unsigned_type (int unsignedp, tree type)
-{
- if (! INTEGRAL_TYPE_P (type))
- return type;
- if (TYPE_PRECISION (type) == TYPE_PRECISION (int_type_node))
- return unsignedp ? unsigned_int_type_node : int_type_node;
- if (TYPE_PRECISION (type) == TYPE_PRECISION (byte_type_node))
- return unsignedp ? unsigned_byte_type_node : byte_type_node;
- if (TYPE_PRECISION (type) == TYPE_PRECISION (short_type_node))
- return unsignedp ? unsigned_short_type_node : short_type_node;
- if (TYPE_PRECISION (type) == TYPE_PRECISION (long_type_node))
- return unsignedp ? unsigned_long_type_node : long_type_node;
- return type;
-}
-
/* Return a signed type the same as TYPE in other respects. */
tree
java_signed_type (tree type)
{
- return java_signed_or_unsigned_type (0, type);
+ return get_signed_or_unsigned_type (0, type);
}
/* Return an unsigned type the same as TYPE in other respects. */
tree
java_unsigned_type (tree type)
{
- return java_signed_or_unsigned_type (1, type);
+ return get_signed_or_unsigned_type (1, type);
}
/* Mark EXP saying that we need to be able to take the
#define LANG_HOOKS_TREE_SIZE lhd_tree_size
#define LANG_HOOKS_TYPES_COMPATIBLE_P lhd_types_compatible_p
#define LANG_HOOKS_BUILTIN_FUNCTION lhd_builtin_function
+#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE lhd_signed_or_unsigned_type
#define LANG_HOOKS_EXPR_TO_DECL lhd_expr_to_decl
#define LANG_HOOKS_TO_TARGET_CHARSET lhd_to_target_charset
#define LANG_HOOKS_INIT_TS lhd_do_nothing
lang_hooks.decls.pushdecl (decl);
return decl;
}
+
+/* If TYPE is an integral type, return an equivalent type which is
+ unsigned iff UNSIGNEDP is true. If TYPE is not an integral type,
+ return TYPE itself. */
+
+tree
+get_signed_or_unsigned_type (int unsignedp, tree type)
+{
+ if (!INTEGRAL_TYPE_P (type) || TYPE_UNSIGNED (type) == unsignedp)
+ return type;
+
+ return lang_hooks.types.signed_or_unsigned_type(unsignedp, type);
+}
+
+/* Default implementation of the signed_or_unsigned_type language hook */
+
+tree
+lhd_signed_or_unsigned_type (int unsignedp, tree type)
+{
+ return lang_hooks.types.type_for_size (TYPE_PRECISION (type), unsignedp);
+}
int function_code, enum built_in_class cl,
const char *library_name,
tree attrs);
+extern tree lhd_signed_or_unsigned_type (int unsignedp, tree type);
#endif /* GCC_LANG_HOOKS_H */
extern bool may_negate_without_overflow_p (tree);
extern tree get_inner_array_type (tree);
+extern tree get_signed_or_unsigned_type (int unsignedp, tree type);
+
/* From expmed.c. Since rtl.h is included after tree.h, we can't
put the prototype here. Rtl.h does declare the prototype if
tree.h had been included. */
+2007-03-30 Rafael Avila de Espindola <espindola@google.com>
+
+ * treetree.c (tree_lang_signed_or_unsigned_type): Remove.
+ (LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE) Remove.
+
2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
* Make-lang.in: Add install-pdf target as copied from
static tree tree_lang_type_for_mode (enum machine_mode mode, int unsignedp);
static tree tree_lang_unsigned_type (tree type_node);
static tree tree_lang_signed_type (tree type_node);
-static tree tree_lang_signed_or_unsigned_type (int unsignedp, tree type);
/* Functions to keep track of the current scope. */
static void pushlevel (int ignore);
#define LANG_HOOKS_SIGNED_TYPE tree_lang_signed_type
#undef LANG_HOOKS_UNSIGNED_TYPE
#define LANG_HOOKS_UNSIGNED_TYPE tree_lang_unsigned_type
-#undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE
-#define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE tree_lang_signed_or_unsigned_type
#undef LANG_HOOKS_TYPE_FOR_MODE
#define LANG_HOOKS_TYPE_FOR_MODE tree_lang_type_for_mode
#undef LANG_HOOKS_TYPE_FOR_SIZE
return tree_lang_type_for_size (TYPE_PRECISION (type_node), 0);
}
-/* Return a type the same as TYPE except unsigned or signed according to
- UNSIGNEDP. */
-
-static tree
-tree_lang_signed_or_unsigned_type (int unsignedp, tree type)
-{
- if (! INTEGRAL_TYPE_P (type) || TYPE_UNSIGNED (type) == unsignedp)
- return type;
- else
- return tree_lang_type_for_size (TYPE_PRECISION (type), unsignedp);
-}
\f
/* These functions and variables deal with binding contours. We only
need these functions for the list of PARM_DECLs, but we leave the