Improve error recovery in parse_asm_statement() and do not return an error statement.
[cparser] / ast2firm.c
index bcd470b..75b674c 100644 (file)
@@ -1862,9 +1862,9 @@ static ir_node *call_expression_to_firm(const call_expression_t *const call)
 
                type_t *arg_type = skip_typeref(expression->base.type);
                if (!is_type_compound(arg_type)) {
-                       ir_mode *mode = get_ir_mode_storage(expression->base.type);
-                       arg_node      = create_conv(dbgi, arg_node, mode);
-                       arg_node      = do_strict_conv(dbgi, arg_node);
+                       ir_mode *const mode = get_ir_mode_storage(arg_type);
+                       arg_node = create_conv(dbgi, arg_node, mode);
+                       arg_node = do_strict_conv(dbgi, arg_node);
                }
 
                in[n] = arg_node;
@@ -2385,7 +2385,7 @@ static ir_node *create_cast(dbg_info *dbgi, ir_node *value_node,
                        if (from_var != NULL) {
                                ir_node *const addr = create_symconst(dbgi, from_var->v.entity);
                                ir_node *const base = deref_address(dbgi, from_var->base.type, addr);
-                               value_node = new_d_Add(dbgi, value_node, base, get_ir_mode_storage(from_type));
+                               value_node = new_d_Add(dbgi, value_node, base, mode);
                        }
                        if (to_var != NULL) {
                                ir_node *const addr = create_symconst(dbgi, to_var->v.entity);
@@ -2915,11 +2915,6 @@ static ir_node *sizeof_to_firm(const typeprop_expression_t *expression)
                        && expression->tp_expression != NULL) {
                expression_to_firm(expression->tp_expression);
        }
-       /* strange gnu extensions: sizeof(function) == 1 */
-       if (is_type_function(type)) {
-               ir_mode *mode = get_ir_mode_storage(type_size_t);
-               return new_Const(get_mode_one(mode));
-       }
 
        return get_type_size_node(type);
 }
@@ -4281,13 +4276,10 @@ static void create_variable_initializer(entity_t *entity)
        type_qualifiers_t  tq   = get_type_qualifier(type, true);
 
        if (initializer->kind == INITIALIZER_VALUE) {
-               initializer_value_t *initializer_value = &initializer->value;
-               dbg_info            *dbgi = get_dbg_info(&entity->base.source_position);
-               expression_t        *value     = initializer_value->value;
-               type_t              *init_type = value->base.type;
-               type_t              *skipped   = skip_typeref(init_type);
+               expression_t *      value     = initializer->value.value;
+               type_t       *const init_type = skip_typeref(value->base.type);
 
-               if (!is_type_scalar(skipped)) {
+               if (!is_type_scalar(init_type)) {
                        /* skip convs */
                        while (value->kind == EXPR_UNARY_CAST)
                                value = value->unary.value;
@@ -4298,9 +4290,9 @@ static void create_variable_initializer(entity_t *entity)
                        goto have_initializer;
                }
 
-               ir_node *node = expression_to_firm(initializer_value->value);
-
-               ir_mode *mode      = get_ir_mode_storage(init_type);
+               ir_node  *      node = expression_to_firm(value);
+               dbg_info *const dbgi = get_dbg_info(&entity->base.source_position);
+               ir_mode  *const mode = get_ir_mode_storage(init_type);
                node = create_conv(dbgi, node, mode);
                node = do_strict_conv(dbgi, node);