support for local common symbols (whatever that is good for); introduce ir_visibility...
authorMatthias Braun <matze@braunis.de>
Wed, 10 Feb 2010 23:05:45 +0000 (23:05 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 10 Feb 2010 23:05:45 +0000 (23:05 +0000)
[r27109]

ast2firm.c

index b3079cb..c47b8eb 100644 (file)
@@ -4548,8 +4548,13 @@ static void create_global_variable(entity_t *entity)
        assert(entity->kind == ENTITY_VARIABLE);
 
        switch ((storage_class_tag_t)entity->declaration.storage_class) {
-       case STORAGE_CLASS_STATIC: visibility = ir_visibility_local; break;
        case STORAGE_CLASS_EXTERN: visibility = ir_visibility_external; break;
+       case STORAGE_CLASS_STATIC:
+               visibility = ir_visibility_local;
+               /* uninitialized globals get merged in C */
+               if (entity->variable.initializer == NULL)
+                       linkage |= IR_LINKAGE_MERGE;
+               break;
        case STORAGE_CLASS_NONE:
                visibility = ir_visibility_default;
                /* uninitialized globals get merged in C */