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:
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(", ");
*/
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);