From: Matthias Braun Date: Sat, 8 Jan 2011 12:31:56 +0000 (+0000) Subject: add type verifier: entities in global types must have names X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=8e504f6f3d09e9eed86b5a47f3891771d15f8142;p=libfirm add type verifier: entities in global types must have names [r28228] --- diff --git a/ir/be/begnuas.c b/ir/be/begnuas.c index 4517d7ac6..71e6a1144 100644 --- a/ir/be/begnuas.c +++ b/ir/be/begnuas.c @@ -1524,8 +1524,6 @@ static void emit_global(be_gas_decl_env_t *env, const ir_entity *entity) be_dbg_variable(entity); if (section == GAS_SECTION_BSS) { - ir_visibility visibility = get_entity_visibility(entity); - switch (visibility) { case ir_visibility_local: case ir_visibility_private: @@ -1566,7 +1564,8 @@ static void emit_global(be_gas_decl_env_t *env, const ir_entity *entity) emit_align(alignment); } if (be_gas_object_file_format == OBJECT_FILE_FORMAT_ELF - && be_gas_emit_types) { + && be_gas_emit_types + && visibility != ir_visibility_private) { be_emit_cstring("\t.type\t"); be_gas_emit_entity(entity); be_emit_cstring(", "); diff --git a/ir/tr/trverify.c b/ir/tr/trverify.c index fb07a10b7..3c535bbe9 100644 --- a/ir/tr/trverify.c +++ b/ir/tr/trverify.c @@ -423,18 +423,31 @@ static void check_tore(type_or_ent tore, void *env) */ int tr_verify(void) { - int res = no_error; - ir_type *constructors; - ir_type *destructors; - ir_type *thread_locals; - int i; static ident *empty = NULL; + int res = no_error; + ir_type *constructors; + ir_type *destructors; + ir_type *thread_locals; + int i; + ir_segment_t s; if (empty == NULL) empty = new_id_from_chars("", 0); type_walk(check_tore, NULL, &res); + for (s = IR_SEGMENT_FIRST; s <= IR_SEGMENT_LAST; ++s) { + const ir_type *type = get_segment_type(s); + int e; + for (e = 0; e < get_compound_n_members(type); ++e) { + ir_entity *entity = get_compound_member(type, e); + ASSERT_AND_RET(get_entity_ld_ident(entity) != NULL || + get_entity_visibility(entity) == ir_visibility_private, + "segment members must have a name or visibility_private", + 1); + } + } + constructors = get_segment_type(IR_SEGMENT_CONSTRUCTORS); for (i = get_compound_n_members(constructors)-1; i >= 0; --i) { const ir_entity *entity = get_compound_member(constructors, i);