Overhaul for_statement_to_firm() so it is more friendly towards SSA construction...
[cparser] / attribute.c
index 9385333..1ea8f1d 100644 (file)
@@ -242,7 +242,7 @@ static void warn_arguments(const attribute_t *attribute)
 
        if (warning.other) {
                warningf(&attribute->source_position,
-                                "attribute '%s' needs no attributes",
+                                "attribute '%s' needs no arguments",
                                 get_attribute_name(attribute->kind));
        }
 }
@@ -310,6 +310,7 @@ void handle_entity_attributes(const attribute_t *attributes, entity_t *entity)
                case ATTRIBUTE_GNU_UNUSED:        modifiers |= DM_UNUSED; break;
                case ATTRIBUTE_GNU_DLLIMPORT:     modifiers |= DM_DLLIMPORT; break;
                case ATTRIBUTE_GNU_DLLEXPORT:     modifiers |= DM_DLLEXPORT; break;
+               case ATTRIBUTE_GNU_WEAK:          modifiers |= DM_WEAK; break;
 
                case ATTRIBUTE_MS_ALLOCATE:      modifiers |= DM_MALLOC; break;
                case ATTRIBUTE_MS_DLLIMPORT:     modifiers |= DM_DLLIMPORT; break;
@@ -378,7 +379,7 @@ type_t *handle_type_attributes(const attribute_t *attributes, type_t *type)
                switch(attribute->kind) {
                case ATTRIBUTE_GNU_PACKED:
                        handle_attribute_packed(attribute, type);
-                       break;
+                       break;
                case ATTRIBUTE_GNU_CDECL:
                case ATTRIBUTE_MS_CDECL:
                        type = change_calling_convention(type, CC_CDECL);
@@ -419,7 +420,7 @@ const char *get_deprecated_string(const attribute_t *attribute)
                expression_t *expression = argument->v.expression;
                if (expression->kind != EXPR_STRING_LITERAL)
                        return NULL;
-               return expression->string.value.begin;
+               return expression->literal.value.begin;
        }
        return NULL;
 }