Skip non-parameter entities in parameter lists. This happens when a struct/union...
authorChristoph Mallon <christoph.mallon@gmx.de>
Thu, 18 Dec 2008 11:08:32 +0000 (11:08 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Thu, 18 Dec 2008 11:08:32 +0000 (11:08 +0000)
[r24774]

ast2firm.c
parser.c
type.c

index 1ec4681..dc27835 100644 (file)
@@ -5349,7 +5349,9 @@ static void initialize_function_parameters(entity_t *entity)
        int       n         = 0;
        entity_t *parameter = entity->function.parameters.entities;
        for ( ; parameter != NULL; parameter = parameter->base.next, ++n) {
-               assert(parameter->kind == ENTITY_PARAMETER);
+               if (parameter->kind != ENTITY_PARAMETER)
+                       continue;
+
                assert(parameter->declaration.kind == DECLARATION_KIND_UNKNOWN);
                type_t *type = skip_typeref(parameter->declaration.type);
 
index d4e3abc..005c0bc 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -5530,6 +5530,9 @@ decl_list_end:
 
        parameter = entity->function.parameters.entities;
        for (; parameter != NULL; parameter = parameter->base.next) {
+               if (parameter->kind != ENTITY_PARAMETER)
+                       continue;
+
                type_t *parameter_type = parameter->declaration.type;
                if (parameter_type == NULL) {
                        if (strict_mode) {
diff --git a/type.c b/type.c
index 7d63ac5..743bee5 100644 (file)
--- a/type.c
+++ b/type.c
@@ -367,12 +367,14 @@ static void print_function_type_post(const function_type_t *type,
        } else {
                entity_t *parameter = parameters->entities;
                for (; parameter != NULL; parameter = parameter->base.next) {
+                       if (parameter->kind != ENTITY_PARAMETER)
+                               continue;
+
                        if (first) {
                                first = false;
                        } else {
                                fputs(", ", out);
                        }
-                       assert(is_declaration(parameter));
                        const type_t *const type = parameter->declaration.type;
                        if (type == NULL) {
                                fputs(parameter->base.symbol->string, out);