public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/modula-2] gm2-lang.cc tidyup post review.
@ 2022-12-06 1:22 Gaius Mulley
0 siblings, 0 replies; only message in thread
From: Gaius Mulley @ 2022-12-06 1:22 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:db80db0aab7035ea91f16e82963ea38e088c7d00
commit db80db0aab7035ea91f16e82963ea38e088c7d00
Author: Gaius Mulley <gaiusmod2@gmail.com>
Date: Tue Dec 6 01:21:32 2022 +0000
gm2-lang.cc tidyup post review.
Removed misleading comments, use a simplified
gm2_eh_peronality_decl borrowed from cp. Addressed the comments
made during the code review:
https://gcc.gnu.org/pipermail/gcc-patches/2022-November/606694.html.
gcc/ChangeLog:
* m2/gm2-lang.cc: Removed misleading comments.
(m2_write_global_declarations) Rewritten.
(gm2_langhook_type_for_mod) Rewritten the case statements
into more portable code. (personality_decl) Removed.
(gm2_eh_personality_decl) New tree decl.
(gm2_langhook_eh_personality) Rewritten.
(gm2_langhook_init) Do not create void_list_node as it is
created by build_common_builtin_nodes.
Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
Diff:
---
gcc/m2/gm2-lang.cc | 108 +++++++++++++++--------------------------------------
1 file changed, 31 insertions(+), 77 deletions(-)
diff --git a/gcc/m2/gm2-lang.cc b/gcc/m2/gm2-lang.cc
index 1a8c0673474..1319ef73562 100644
--- a/gcc/m2/gm2-lang.cc
+++ b/gcc/m2/gm2-lang.cc
@@ -83,8 +83,6 @@ union GTY ((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
struct lang_identifier GTY ((tag ("1"))) identifier;
};
-/* We don't use language_function. */
-
struct GTY (()) language_function
{
@@ -94,18 +92,12 @@ struct GTY (()) language_function
tree stmt_tree;
};
-/* end of new stuff. */
-
/* Language hooks. */
bool
gm2_langhook_init (void)
{
build_common_tree_nodes (false);
-
- /* I don't know why this has to be done explicitly. */
- void_list_node = build_tree_list (NULL_TREE, void_type_node);
-
build_common_builtin_nodes ();
/* The default precision for floating point numbers. This is used
@@ -115,7 +107,6 @@ gm2_langhook_init (void)
/* GNU Modula-2 uses exceptions. */
using_eh_for_cleanups ();
-
return true;
}
@@ -491,43 +482,32 @@ gm2_langhook_type_for_mode (machine_mode mode, int unsignedp)
}
scalar_int_mode imode;
- scalar_float_mode fmode;
- complex_mode cmode;
if (is_int_mode (mode, &imode))
return gm2_langhook_type_for_size (GET_MODE_BITSIZE (imode), unsignedp);
- else if (is_float_mode (mode, &fmode))
- {
- switch (GET_MODE_BITSIZE (fmode))
- {
- case 32:
- return float_type_node;
- case 64:
- return double_type_node;
- default:
- // We have to check for long double in order to support
- // i386 excess precision.
- if (fmode == TYPE_MODE (long_double_type_node))
- return long_double_type_node;
- }
- }
- else if (is_complex_float_mode (mode, &cmode))
+
+ if (mode == TYPE_MODE (float_type_node))
+ return float_type_node;
+
+ if (mode == TYPE_MODE (double_type_node))
+ return double_type_node;
+
+ if (mode == TYPE_MODE (long_double_type_node))
+ return long_double_type_node;
+
+ if (COMPLEX_MODE_P (mode))
{
- switch (GET_MODE_BITSIZE (cmode))
- {
- case 64:
- return complex_float_type_node;
- case 128:
- return complex_double_type_node;
- default:
- // We have to check for long double in order to support
- // i386 excess precision.
- if (cmode == TYPE_MODE (complex_long_double_type_node))
- return complex_long_double_type_node;
- }
+ machine_mode inner_mode;
+ tree inner_type;
+
+ if (mode == TYPE_MODE (complex_float_type_node))
+ return complex_float_type_node;
+ if (mode == TYPE_MODE (complex_double_type_node))
+ return complex_double_type_node;
+ if (mode == TYPE_MODE (complex_long_double_type_node))
+ return complex_long_double_type_node;
}
#if HOST_BITS_PER_WIDE_INT >= 64
-
/* The middle-end and some backends rely on TImode being supported
for 64-bit HWI. */
if (mode == TImode)
@@ -579,34 +559,23 @@ gm2_langhook_getdecls (void)
return NULL;
}
-/* m2_write_global_declarations writes out globals by coping into a vec
- and calling wrapup_global_declarations. */
+/* m2_write_global_declarations writes out globals creating an array
+ of the declarations and calling wrapup_global_declarations. */
static void
m2_write_global_declarations (tree globals)
{
+ auto_vec<tree> global_decls;
tree decl = globals;
int n = 0;
while (decl != NULL)
{
- n++;
+ global_decls.safe_push (decl);
decl = TREE_CHAIN (decl);
+ n++;
}
-
- if (n > 0)
- {
- int i = 0;
- tree vec[n];
- decl = globals;
- while (decl != NULL)
- {
- vec[i] = decl;
- decl = TREE_CHAIN (decl);
- i++;
- }
- wrapup_global_declarations (vec, n);
- }
+ wrapup_global_declarations (global_decls.address (), n);
}
/* Write out globals. */
@@ -633,7 +602,6 @@ static void
gimplify_expr_stmt (tree *stmt_p)
{
gcc_assert (EXPR_STMT_EXPR (*stmt_p) != NULL_TREE);
-
*stmt_p = EXPR_STMT_EXPR (*stmt_p);
}
@@ -732,29 +700,15 @@ gm2_langhook_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
}
}
-/* FIXME: This is a hack to preserve trees that we create from the
- garbage collector. */
-
-static GTY (()) tree gm2_gc_root;
-static tree personality_decl = NULL_TREE;
-
-static void
-gm2_preserve_from_gc (tree t)
-{
- gm2_gc_root = tree_cons (NULL_TREE, t, gm2_gc_root);
-}
-
-/* Return a decl for the exception personality function. */
+static GTY(()) tree gm2_eh_personality_decl;
static tree
gm2_langhook_eh_personality (void)
{
- if (personality_decl == NULL_TREE)
- {
- personality_decl = build_personality_function ("gxx");
- gm2_preserve_from_gc (personality_decl);
- }
- return personality_decl;
+ if (!gm2_eh_personality_decl)
+ gm2_eh_personality_decl = build_personality_function ("gxx");
+
+ return gm2_eh_personality_decl;
}
/* Functions called directly by the generic backend. */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-12-06 1:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-06 1:22 [gcc/devel/modula-2] gm2-lang.cc tidyup post review Gaius Mulley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).