aboutsummaryrefslogtreecommitdiffstats
path: root/src/ortho/gcc
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-07-24 18:31:11 +0200
committerTristan Gingold <tgingold@free.fr>2020-07-25 11:28:49 +0200
commit04cd83fb46bee1e7a7b37be95bee73449af9c8b8 (patch)
tree3fe35d0bc6d4b1be8d81ad44df685057c221d2dc /src/ortho/gcc
parent4033dd795927a4953879bdc92d395788893a5468 (diff)
downloadghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.tar.gz
ghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.tar.bz2
ghdl-04cd83fb46bee1e7a7b37be95bee73449af9c8b8.zip
ortho: add unbounded records, rework array subtypes.
Diffstat (limited to 'src/ortho/gcc')
-rw-r--r--src/ortho/gcc/ortho-lang-49.c53
-rw-r--r--src/ortho/gcc/ortho-lang-5.c53
-rw-r--r--src/ortho/gcc/ortho-lang-6.c53
-rw-r--r--src/ortho/gcc/ortho-lang-7.c53
-rw-r--r--src/ortho/gcc/ortho-lang-8.c53
-rw-r--r--src/ortho/gcc/ortho-lang-9.c53
-rw-r--r--src/ortho/gcc/ortho_gcc.ads41
-rw-r--r--src/ortho/gcc/ortho_gcc.private.ads16
8 files changed, 344 insertions, 31 deletions
diff --git a/src/ortho/gcc/ortho-lang-49.c b/src/ortho/gcc/ortho-lang-49.c
index 3e29f0a14..53a7e6fb9 100644
--- a/src/ortho/gcc/ortho-lang-49.c
+++ b/src/ortho/gcc/ortho-lang-49.c
@@ -1104,6 +1104,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1162,9 +1170,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1269,7 +1308,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1278,7 +1317,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1382,7 +1421,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1498,6 +1537,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho-lang-5.c b/src/ortho/gcc/ortho-lang-5.c
index 3e046f7a3..dff47fb94 100644
--- a/src/ortho/gcc/ortho-lang-5.c
+++ b/src/ortho/gcc/ortho-lang-5.c
@@ -1090,6 +1090,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1148,9 +1156,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1255,7 +1294,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1264,7 +1303,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1368,7 +1407,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1484,6 +1523,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho-lang-6.c b/src/ortho/gcc/ortho-lang-6.c
index bd989d9a8..706b23574 100644
--- a/src/ortho/gcc/ortho-lang-6.c
+++ b/src/ortho/gcc/ortho-lang-6.c
@@ -1090,6 +1090,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1148,9 +1156,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1255,7 +1294,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1264,7 +1303,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1368,7 +1407,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1484,6 +1523,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho-lang-7.c b/src/ortho/gcc/ortho-lang-7.c
index e9c0d47c8..f64c42102 100644
--- a/src/ortho/gcc/ortho-lang-7.c
+++ b/src/ortho/gcc/ortho-lang-7.c
@@ -1102,6 +1102,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1160,9 +1168,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1267,7 +1306,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1276,7 +1315,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1380,7 +1419,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1496,6 +1535,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho-lang-8.c b/src/ortho/gcc/ortho-lang-8.c
index 350504cdf..33dc894ee 100644
--- a/src/ortho/gcc/ortho-lang-8.c
+++ b/src/ortho/gcc/ortho-lang-8.c
@@ -1103,6 +1103,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1161,9 +1169,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1268,7 +1307,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1277,7 +1316,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1381,7 +1420,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1497,6 +1536,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho-lang-9.c b/src/ortho/gcc/ortho-lang-9.c
index b027f0d6d..8b5ef1e19 100644
--- a/src/ortho/gcc/ortho-lang-9.c
+++ b/src/ortho/gcc/ortho-lang-9.c
@@ -1103,6 +1103,14 @@ struct GTY(()) o_element_list
struct chain_constr_type chain;
};
+struct GTY(()) o_element_sublist
+{
+ tree base;
+ tree field;
+ tree res;
+ struct chain_constr_type chain;
+};
+
void
new_uncomplete_record_type (tree *res)
{
@@ -1161,9 +1169,40 @@ finish_record_type (struct o_element_list *elements, tree *res)
}
void
+start_record_subtype (tree rtype, struct o_element_sublist *elements)
+{
+ elements->base = rtype;
+ elements->field = TYPE_FIELDS (rtype);
+ elements->res = make_node (RECORD_TYPE);
+ chain_init (&elements->chain);
+}
+
+void
+new_subrecord_field (struct o_element_sublist *list,
+ tree *el,
+ tree etype)
+{
+ tree res;
+
+ res = build_decl (input_location, FIELD_DECL, DECL_NAME(list->field), etype);
+ DECL_CONTEXT (res) = list->res;
+ chain_append (&list->chain, res);
+ list->field = TREE_CHAIN(list->field);
+ *el = res;
+}
+
+void
+finish_record_subtype (struct o_element_sublist *elements, tree *res)
+{
+ TYPE_FIELDS (elements->res) = elements->chain.first;
+ layout_type (elements->res);
+ *res = elements->res;
+}
+
+void
start_union_type (struct o_element_list *elements)
{
- elements->res = make_node (UNION_TYPE);
+ elements->res = make_node (UNION_TYPE);
chain_init (&elements->chain);
}
@@ -1268,7 +1307,7 @@ new_array_type (tree el_type, tree index_type)
}
tree
-new_constrained_array_type (tree atype, tree length)
+new_array_subtype (tree atype, tree eltype, tree length)
{
tree range_type;
tree index_type;
@@ -1277,7 +1316,7 @@ new_constrained_array_type (tree atype, tree length)
index_type = TYPE_DOMAIN (atype);
range_type = ortho_build_array_range(index_type, length);
- res = build_array_type (TREE_TYPE (atype), range_type);
+ res = build_array_type (eltype, range_type);
/* Constrained arrays are *always* a subtype of its array type.
Just copy alias set. */
@@ -1381,7 +1420,7 @@ start_array_aggr (struct o_array_aggr_list *list, tree atype, unsigned len)
tree length;
length = new_unsigned_literal (sizetype, len);
- list->atype = new_constrained_array_type (atype, length);
+ list->atype = new_array_subtype (atype, TREE_TYPE (atype), length);
vec_alloc(list->elts, len);
}
@@ -1497,6 +1536,12 @@ new_sizeof (tree atype, tree rtype)
}
tree
+new_record_sizeof (tree atype, tree rtype)
+{
+ return new_sizeof (atype, rtype);
+}
+
+tree
new_alignof (tree atype, tree rtype)
{
return build_int_cstu (rtype, TYPE_ALIGN_UNIT (atype));
diff --git a/src/ortho/gcc/ortho_gcc.ads b/src/ortho/gcc/ortho_gcc.ads
index 0c1ee81b6..d98ae01ed 100644
--- a/src/ortho/gcc/ortho_gcc.ads
+++ b/src/ortho/gcc/ortho_gcc.ads
@@ -57,8 +57,8 @@ package Ortho_Gcc is
-- Build a record type.
procedure Start_Record_Type (Elements : out O_Element_List);
- -- Add a field in the record; not constrained array are prohibited, since
- -- its size is unlimited.
+ -- Add a field in the record. Unconstrained fields must be at the end,
+ -- and cannot be followed by a constrained one.
procedure New_Record_Field
(Elements : in out O_Element_List;
El : out O_Fnode;
@@ -67,6 +67,17 @@ package Ortho_Gcc is
procedure Finish_Record_Type
(Elements : in out O_Element_List; Res : out O_Tnode);
+ type O_Element_Sublist is limited private;
+
+ -- Build a record subtype.
+ -- Re-declare only unconstrained fields with a subtype of them.
+ procedure Start_Record_Subtype
+ (Rtype : O_Tnode; Elements : out O_Element_Sublist);
+ procedure New_Subrecord_Field
+ (Elements : in out O_Element_Sublist; El : out O_Fnode; Etype : O_Tnode);
+ procedure Finish_Record_Subtype
+ (Elements : in out O_Element_Sublist; Res : out O_Tnode);
+
-- Build an uncomplete record type:
-- First call NEW_UNCOMPLETE_RECORD_TYPE, which returns a record type.
-- This type can be declared or used to define access types on it.
@@ -98,8 +109,8 @@ package Ortho_Gcc is
return O_Tnode;
-- Build a constrained array type.
- function New_Constrained_Array_Type (Atype : O_Tnode; Length : O_Cnode)
- return O_Tnode;
+ function New_Array_Subtype
+ (Atype : O_Tnode; El_Type : O_Tnode; Length : O_Cnode) return O_Tnode;
-- Build a scalar type; size may be 8, 16, 32 or 64.
function New_Unsigned_Type (Size : Natural) return O_Tnode;
@@ -172,9 +183,13 @@ package Ortho_Gcc is
-- Returns the size in bytes of ATYPE. The result is a literal of
-- unsigned type RTYPE
- -- ATYPE cannot be an unconstrained array type.
+ -- ATYPE cannot be an unconstrained type.
function New_Sizeof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode;
+ -- Get the size of the bounded part of a record.
+ function New_Record_Sizeof
+ (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode;
+
-- Returns the alignment in bytes for ATYPE. The result is a literal of
-- unsgined type RTYPE.
function New_Alignof (Atype : O_Tnode; Rtype : O_Tnode) return O_Cnode;
@@ -556,6 +571,14 @@ private
end record;
pragma Convention (C, O_Element_List);
+ type O_Element_Sublist is record
+ Base : Tree;
+ Field : Tree;
+ Res : Tree;
+ Chain : Chain_Constr_Type;
+ end record;
+ pragma Convention (C, O_Element_Sublist);
+
type O_Case_Block is record
Prev_Stmts : Tree;
Case_Type : Tree;
@@ -622,6 +645,11 @@ private
pragma Import (C, Start_Record_Type);
pragma Import (C, New_Record_Field);
pragma Import (C, Finish_Record_Type);
+
+ pragma Import (C, Start_Record_Subtype);
+ pragma Import (C, New_Subrecord_Field);
+ pragma Import (C, Finish_Record_Subtype);
+
pragma Import (C, New_Uncomplete_Record_Type);
pragma Import (C, Start_Uncomplete_Record_Type);
@@ -637,7 +665,7 @@ private
pragma Import (C, Finish_Access_Type);
pragma Import (C, New_Array_Type);
- pragma Import (C, New_Constrained_Array_Type);
+ pragma Import (C, New_Array_Subtype);
pragma Import (C, New_Boolean_Type);
pragma Import (C, Start_Enum_Type);
@@ -659,6 +687,7 @@ private
pragma Import (C, New_Access_Element);
pragma Import (C, New_Sizeof);
+ pragma Import (C, New_Record_Sizeof);
pragma Import (C, New_Alignof);
pragma Import (C, New_Offsetof);
diff --git a/src/ortho/gcc/ortho_gcc.private.ads b/src/ortho/gcc/ortho_gcc.private.ads
index f8f6cfb3c..2a068aeb9 100644
--- a/src/ortho/gcc/ortho_gcc.private.ads
+++ b/src/ortho/gcc/ortho_gcc.private.ads
@@ -110,6 +110,14 @@ private
end record;
pragma Convention (C, O_Element_List);
+ type O_Element_Sublist is record
+ Base : Tree;
+ Field : Tree;
+ Res : Tree;
+ Chain : Chain_Constr_Type;
+ end record;
+ pragma Convention (C, O_Element_Sublist);
+
type O_Case_Block is record
Prev_Stmts : Tree;
Case_Type : Tree;
@@ -176,6 +184,11 @@ private
pragma Import (C, Start_Record_Type);
pragma Import (C, New_Record_Field);
pragma Import (C, Finish_Record_Type);
+
+ pragma Import (C, Start_Record_Subtype);
+ pragma Import (C, New_Subrecord_Field);
+ pragma Import (C, Finish_Record_Subtype);
+
pragma Import (C, New_Uncomplete_Record_Type);
pragma Import (C, Start_Uncomplete_Record_Type);
@@ -191,7 +204,7 @@ private
pragma Import (C, Finish_Access_Type);
pragma Import (C, New_Array_Type);
- pragma Import (C, New_Constrained_Array_Type);
+ pragma Import (C, New_Array_Subtype);
pragma Import (C, New_Boolean_Type);
pragma Import (C, Start_Enum_Type);
@@ -213,6 +226,7 @@ private
pragma Import (C, New_Access_Element);
pragma Import (C, New_Sizeof);
+ pragma Import (C, New_Record_Sizeof);
pragma Import (C, New_Alignof);
pragma Import (C, New_Offsetof);