From 3efded5bcb86ffce4b4bbfc87645202df008e51e Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 7 Aug 2008 12:19:02 +0000 Subject: [PATCH] fix error43 [r21042] --- ast2firm.c | 2 +- parser.c | 8 ++++---- parsetest/cp_error043.c | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ast2firm.c b/ast2firm.c index 434128a..02b13cd 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -3425,7 +3425,7 @@ static ir_initializer_t *create_ir_initializer_string( ir_initializer_t *irinitializer = create_initializer_compound(len); const char *string = initializer->string.begin; - ir_mode *mode = get_type_mode(ir_type_const_char); + ir_mode *mode = get_ir_mode(type->array.element_type); for(size_t i = 0; i < len; ++i) { char c = 0; diff --git a/parser.c b/parser.c index 1573e95..e460f49 100644 --- a/parser.c +++ b/parser.c @@ -6400,7 +6400,7 @@ static void semantic_dereference(unary_expression_t *expression) expression->base.type = result_type; } -static void set_address_taken(expression_t *expression) +static void set_address_taken(expression_t *expression, bool may_be_register) { if(expression->kind != EXPR_REFERENCE) return; @@ -6410,7 +6410,7 @@ static void set_address_taken(expression_t *expression) if(declaration == NULL) return; - if (declaration->storage_class == STORAGE_CLASS_REGISTER) { + if (declaration->storage_class == STORAGE_CLASS_REGISTER && !may_be_register) { errorf(&expression->base.source_position, "address of register variable '%Y' requested", declaration->symbol); @@ -6431,7 +6431,7 @@ static void semantic_take_addr(unary_expression_t *expression) if(!is_type_valid(orig_type)) return; - set_address_taken(value); + set_address_taken(value, false); expression->base.type = make_pointer_type(orig_type, TYPE_QUALIFIER_NONE); } @@ -7310,7 +7310,7 @@ static asm_argument_t *parse_asm_arguments(bool is_out) } expect(')'); - set_address_taken(expression); + set_address_taken(expression, true); if (last != NULL) { last->next = argument; diff --git a/parsetest/cp_error043.c b/parsetest/cp_error043.c index eff1853..5e765e0 100644 --- a/parsetest/cp_error043.c +++ b/parsetest/cp_error043.c @@ -1,8 +1,10 @@ unsigned char digest[16] = {""}; +unsigned char digest2[16] = {"a"}; int puts(const char *str); int main(void) { puts((const char*) digest); + puts((const char*) digest2); return 0; } -- 2.20.1