mirror of git://gcc.gnu.org/git/gcc.git
utils.c (gnat_set_type_context): New function.
* gcc-interface/utils.c (gnat_set_type_context): New function. (gnat_pushdecl): Use it to set the context of the type. From-SVN: r203848
This commit is contained in:
parent
6f978a2a78
commit
4708440c7c
|
|
@ -1,3 +1,8 @@
|
||||||
|
2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gcc-interface/utils.c (gnat_set_type_context): New function.
|
||||||
|
(gnat_pushdecl): Use it to set the context of the type.
|
||||||
|
|
||||||
2013-10-17 Hristian Kirtchev <kirtchev@adacore.com>
|
2013-10-17 Hristian Kirtchev <kirtchev@adacore.com>
|
||||||
|
|
||||||
* sem_prag.adb (Check_Dependency_Clause):
|
* sem_prag.adb (Check_Dependency_Clause):
|
||||||
|
|
|
||||||
|
|
@ -531,6 +531,22 @@ gnat_zaplevel (void)
|
||||||
free_binding_level = level;
|
free_binding_level = level;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
gnat_set_type_context (tree type, tree context)
|
||||||
|
{
|
||||||
|
tree decl = TYPE_STUB_DECL (type);
|
||||||
|
|
||||||
|
TYPE_CONTEXT (type) = context;
|
||||||
|
|
||||||
|
while (decl && DECL_PARALLEL_TYPE (decl))
|
||||||
|
{
|
||||||
|
TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
|
||||||
|
decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
|
/* Record DECL as belonging to the current lexical scope and use GNAT_NODE
|
||||||
for location information and flag propagation. */
|
for location information and flag propagation. */
|
||||||
|
|
||||||
|
|
@ -612,7 +628,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
|
||||||
if (TREE_CODE (t) == POINTER_TYPE)
|
if (TREE_CODE (t) == POINTER_TYPE)
|
||||||
TYPE_NEXT_PTR_TO (t) = tt;
|
TYPE_NEXT_PTR_TO (t) = tt;
|
||||||
TYPE_NAME (tt) = DECL_NAME (decl);
|
TYPE_NAME (tt) = DECL_NAME (decl);
|
||||||
TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
|
gnat_set_type_context (tt, DECL_CONTEXT (decl));
|
||||||
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
|
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
|
||||||
DECL_ORIGINAL_TYPE (decl) = tt;
|
DECL_ORIGINAL_TYPE (decl) = tt;
|
||||||
}
|
}
|
||||||
|
|
@ -622,7 +638,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
|
||||||
/* We need a variant for the placeholder machinery to work. */
|
/* We need a variant for the placeholder machinery to work. */
|
||||||
tree tt = build_variant_type_copy (t);
|
tree tt = build_variant_type_copy (t);
|
||||||
TYPE_NAME (tt) = decl;
|
TYPE_NAME (tt) = decl;
|
||||||
TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
|
gnat_set_type_context (tt, DECL_CONTEXT (decl));
|
||||||
TREE_USED (tt) = TREE_USED (t);
|
TREE_USED (tt) = TREE_USED (t);
|
||||||
TREE_TYPE (decl) = tt;
|
TREE_TYPE (decl) = tt;
|
||||||
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
|
if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
|
||||||
|
|
@ -644,7 +660,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
|
||||||
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
|
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
|
||||||
{
|
{
|
||||||
TYPE_NAME (t) = decl;
|
TYPE_NAME (t) = decl;
|
||||||
TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
|
gnat_set_type_context (t, DECL_CONTEXT (decl));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue