[m-dev.] for review: bootstrap in none.gc with MSVC
Peter Ross
petdr at cs.mu.OZ.AU
Tue Jul 4 19:32:28 AEST 2000
Hi,
Fergus my original change had some problems with the field_names being
declared with different sizes (as at some points we need to recalculate
the array size, and we end up with different answers), so for the moment
I will submit this one and keep working on the other change.
Pete
===================================================================
Estimated hours taken: 4
Bootcheck in the none.gc grade using MSVC.
compiler/rtti_out.m:
ANSI/ISO C doesn't allow empty arrays so place a dummy value in the
array when necessary.
ANSI/ISO C doesn't allow forward declarations of static data with
incomplete types, so make the incomplete types extern. The ideal
solution would be to output the actual sizes of the array, however
that is slightly more difficult then it seems.
runtime/mercury_type_info.h:
Create new macro MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM, which is the
same as MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL but with no cm field.
library/builtin.m:
Use MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM instead of
MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL when we have a blank cm field
as the MSVC CPP doesn't like blank fields.
trace/mercury_trace_vars.c:
Delete the local declarations of mercury_data___type_ctor_info_func_0
and mercury_data___type_ctor_info_pred_0 because the true
declarations from the header file are visibile.
Index: compiler/rtti_out.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/rtti_out.m,v
retrieving revision 1.11
diff -u -r1.11 rtti_out.m
--- compiler/rtti_out.m 2000/05/10 18:07:05 1.11
+++ compiler/rtti_out.m 2000/07/04 09:18:46
@@ -88,9 +88,17 @@
DeclSet0, DeclSet) -->
output_generic_rtti_data_defn_start(RttiTypeId, exist_locns(Ordinal),
DeclSet0, DeclSet),
- io__write_string(" = {\n"),
- output_exist_locns(Locns),
- io__write_string("};\n").
+ (
+ % ANSI/ISO C doesn't allow empty arrays, so
+ % place a dummy value in the array if necessary.
+ { Locns = [] }
+ ->
+ io__write_string("= { {0, 0} };\n")
+ ;
+ io__write_string(" = {\n"),
+ output_exist_locns(Locns),
+ io__write_string("};\n")
+ ).
output_rtti_data_defn(exist_info(RttiTypeId, Ordinal, Plain, InTci, Tci,
Locns), DeclSet0, DeclSet) -->
output_rtti_addr_decls(RttiTypeId, Locns, "", "", 0, _,
@@ -110,17 +118,33 @@
DeclSet0, DeclSet) -->
output_generic_rtti_data_defn_start(RttiTypeId, field_names(Ordinal),
DeclSet0, DeclSet),
- io__write_string(" = {\n"),
- output_maybe_quoted_strings(MaybeNames),
- io__write_string("};\n").
+ (
+ % ANSI/ISO C doesn't allow empty arrays, so
+ % place a dummy value in the array if necessary.
+ { MaybeNames = [] }
+ ->
+ io__write_string("= { "" };\n")
+ ;
+ io__write_string(" = {\n"),
+ output_maybe_quoted_strings(MaybeNames),
+ io__write_string("};\n")
+ ).
output_rtti_data_defn(field_types(RttiTypeId, Ordinal, Types),
DeclSet0, DeclSet) -->
output_rtti_datas_decls(Types, "", "", 0, _, DeclSet0, DeclSet1),
output_generic_rtti_data_defn_start(RttiTypeId, field_types(Ordinal),
DeclSet1, DeclSet),
- io__write_string(" = {\n"),
- output_addr_of_rtti_datas(Types),
- io__write_string("};\n").
+ (
+ % ANSI/ISO C doesn't allow empty arrays, so
+ % place a dummy value in the array if necessary.
+ { Types = [] }
+ ->
+ io__write_string("= { NULL };\n")
+ ;
+ io__write_string(" = {\n"),
+ output_addr_of_rtti_datas(Types),
+ io__write_string("};\n")
+ ).
output_rtti_data_defn(enum_functor_desc(RttiTypeId, FunctorName, Ordinal),
DeclSet0, DeclSet) -->
output_generic_rtti_data_defn_start(RttiTypeId,
@@ -929,9 +953,19 @@
pseudo_type_info_would_incl_code_addr(higher_order_type_info(_, _, _)) = no.
rtti_name_linkage(RttiName, Linkage) :-
- Exported = rtti_name_is_exported(RttiName),
- ( Exported = yes, Linkage = extern
- ; Exported = no, Linkage = static
+ (
+ % ANSI/ISO C doesn't allow forward declarations
+ % of static data with incomplete types (in this
+ % case array types without an explicit array
+ % size), so make the declarations extern.
+ yes = rtti_name_has_array_type(RttiName)
+ ->
+ Linkage = extern
+ ;
+ Exported = rtti_name_is_exported(RttiName),
+ ( Exported = yes, Linkage = extern
+ ; Exported = no, Linkage = static
+ )
).
rtti_name_c_type(exist_locns(_), "MR_DuExistLocn", "[]").
Index: library/builtin.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/builtin.m,v
retrieving revision 1.36
diff -u -r1.36 builtin.m
--- library/builtin.m 2000/05/31 12:58:19 1.36
+++ library/builtin.m 2000/07/04 09:18:50
@@ -236,22 +236,22 @@
#ifndef MR_HIGHLEVEL_CODE
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , int, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, int, 0,
MR_TYPECTOR_REP_INT,
mercury__builtin_unify_int_2_0,
mercury__builtin_compare_int_3_0);
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , character, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, character, 0,
MR_TYPECTOR_REP_CHAR,
mercury__builtin_unify_character_2_0,
mercury__builtin_compare_character_3_0);
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , string, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, string, 0,
MR_TYPECTOR_REP_STRING,
mercury__builtin_unify_string_2_0,
mercury__builtin_compare_string_3_0);
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , float, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, float, 0,
MR_TYPECTOR_REP_FLOAT,
mercury__builtin_unify_float_2_0,
mercury__builtin_compare_float_3_0);
@@ -261,11 +261,11 @@
** Note that they use the same three predicates.
*/
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , func, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, func, 0,
MR_TYPECTOR_REP_PRED,
mercury__builtin_unify_pred_2_0,
mercury__builtin_compare_pred_3_0);
-MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , pred, 0,
+MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, pred, 0,
MR_TYPECTOR_REP_PRED,
mercury__builtin_unify_pred_2_0,
mercury__builtin_compare_pred_3_0);
Index: runtime/mercury_type_info.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_type_info.h,v
retrieving revision 1.51
diff -u -r1.51 mercury_type_info.h
--- runtime/mercury_type_info.h 2000/05/05 10:14:49 1.51
+++ runtime/mercury_type_info.h 2000/07/04 09:18:59
@@ -808,10 +808,22 @@
*/
#define MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(m, cm, n, a, cr, u, c) \
+ MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_A(u, c) \
+ MR_PASTE6(mercury_data_, cm, __type_ctor_info_, n, _, a) = { \
+ MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_B(m, n, a, cr, u, c)
+
+ /* MSVC CPP doesn't like having an empty CM field. */
+#define MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(m, n, a, cr, u, c) \
+ MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_A(u, c) \
+ MR_PASTE5(mercury_data_, __type_ctor_info_, n, _, a) = { \
+ MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_B(m, n, a, cr, u, c)
+
+#define MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_A(u, c) \
Declare_entry(u); \
Declare_entry(c); \
MR_STATIC_CODE_CONST struct MR_TypeCtorInfo_Struct \
- MR_PASTE6(mercury_data_, cm, __type_ctor_info_, n, _, a) = { \
+
+#define MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL_B(m, n, a, cr, u, c) \
a, \
MR_MAYBE_STATIC_CODE(ENTRY(u)), \
MR_MAYBE_STATIC_CODE(ENTRY(u)), \
@@ -837,7 +849,7 @@
MR_PASTE7(mercury____Compare___, m, __, n, _, a, _0))
#define MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_UNUSED(n, a, cr) \
- MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_FULL(builtin, , n, a, cr, \
+ MR_DEFINE_BUILTIN_TYPE_CTOR_INFO_NOCM(builtin, n, a, cr, \
mercury__unused_0_0, \
mercury__unused_0_0)
Index: trace/mercury_trace_vars.c
===================================================================
RCS file: /home/mercury1/repository/mercury/trace/mercury_trace_vars.c,v
retrieving revision 1.16
diff -u -r1.16 mercury_trace_vars.c
--- trace/mercury_trace_vars.c 2000/05/15 16:37:48 1.16
+++ trace/mercury_trace_vars.c 2000/07/04 09:19:04
@@ -138,8 +138,6 @@
mercury_data_std_util__type_ctor_info_type_desc_0;
extern struct MR_TypeCtorInfo_Struct
mercury_data_std_util__type_ctor_info_type_ctor_desc_0;
-extern struct MR_TypeCtorInfo_Struct mercury_data___type_ctor_info_func_0;
-extern struct MR_TypeCtorInfo_Struct mercury_data___type_ctor_info_pred_0;
extern struct MR_TypeCtorInfo_Struct mercury_data___type_ctor_info_void_0;
#ifdef NATIVE_GC
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list