From 00fad4c6c28b600fd17a6c3e8320dd6227c28e30 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Mon, 17 Dec 2007 23:16:51 +0000 Subject: [PATCH] fix implicit struct casts [r18789] --- ast2firm.c | 8 ++++++-- parsetest/cp_error006.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 parsetest/cp_error006.c diff --git a/ast2firm.c b/ast2firm.c index d9eae5b..63bd350 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1734,8 +1734,12 @@ static ir_node *unary_expression_to_firm(const unary_expression_t *expression) } case EXPR_UNARY_CAST_IMPLICIT: { ir_node *value_node = expression_to_firm(value); - ir_mode *mode = get_ir_mode(type); - return create_conv(dbgi, value_node, mode); + if(is_type_scalar(type)) { + ir_mode *mode = get_ir_mode(type); + return create_conv(dbgi, value_node, mode); + } else { + return value_node; + } } case EXPR_UNARY_ASSUME: if(firm_opt.confirm) diff --git a/parsetest/cp_error006.c b/parsetest/cp_error006.c new file mode 100644 index 0000000..ec835f7 --- /dev/null +++ b/parsetest/cp_error006.c @@ -0,0 +1,14 @@ +typedef struct arc +{ + struct arc *nextout, *nextin; + long ident; +} arc_t; + +struct arc k; +arc_t l; + +int main(void) +{ + k = l; + return 0; +} -- 2.20.1