From 9ecadd51462b87ce2ba7220e2cf7ce0ed6d40e0c Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Sat, 29 Dec 2007 14:40:44 +0000 Subject: [PATCH] add implicit casts to conditional preds [r18834] --- parser.c | 7 ++++--- parsetest/shouldfail/conditional.c | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 parsetest/shouldfail/conditional.c diff --git a/parser.c b/parser.c index faf702c..bedf872 100644 --- a/parser.c +++ b/parser.c @@ -4164,9 +4164,6 @@ static expression_t *parse_conditional_expression(unsigned precedence, expect(':'); expression_t *false_expression = parse_sub_expression(precedence); - conditional->true_expression = true_expression; - conditional->false_expression = false_expression; - type_t *const orig_true_type = true_expression->base.type; type_t *const orig_false_type = false_expression->base.type; type_t *const true_type = skip_typeref(orig_true_type); @@ -4210,6 +4207,10 @@ static expression_t *parse_conditional_expression(unsigned precedence, result_type = type_error_type; } + conditional->true_expression + = create_implicit_cast(true_expression, result_type); + conditional->false_expression + = create_implicit_cast(false_expression, result_type); conditional->base.type = result_type; return result; } diff --git a/parsetest/shouldfail/conditional.c b/parsetest/shouldfail/conditional.c new file mode 100644 index 0000000..de52c9d --- /dev/null +++ b/parsetest/shouldfail/conditional.c @@ -0,0 +1,5 @@ +int main(int argc, char **argv) +{ + char *res = argc > 2 ? argv[1] : 42; + return (int) res; +} -- 2.20.1