tree objcp_start_struct (enum tree_code code ATTRIBUTE_UNUSED, tree name) { tree s; /* The idea here is to mimic the actions that the C++ parser takes when constructing 'extern "C" struct NAME {'. */ push_lang_context (lang_name_c); if (!name) name = make_anon_name (); s = xref_tag (record_type, name, ts_global, 0); CLASSTYPE_DECLARED_CLASS (s) = 0; /* this is a 'struct', not a 'class'. */ xref_basetypes (s, NULL_TREE); /* no base classes here! */ return begin_class_definition (s, NULL_TREE); }
static tree vla_capture_type (tree array_type) { static tree ptr_id, max_id; tree type = xref_tag (record_type, make_anon_name (), ts_current, false); xref_basetypes (type, NULL_TREE); type = begin_class_definition (type); if (!ptr_id) { ptr_id = get_identifier ("ptr"); max_id = get_identifier ("max"); } tree ptrtype = build_pointer_type (TREE_TYPE (array_type)); tree field = build_decl (input_location, FIELD_DECL, ptr_id, ptrtype); finish_member_declaration (field); field = build_decl (input_location, FIELD_DECL, max_id, sizetype); finish_member_declaration (field); return finish_struct (type, NULL_TREE); }