add implicit casts to conditional preds
authorMatthias Braun <matze@braunis.de>
Sat, 29 Dec 2007 14:40:44 +0000 (14:40 +0000)
committerMatthias Braun <matze@braunis.de>
Sat, 29 Dec 2007 14:40:44 +0000 (14:40 +0000)
[r18834]

parser.c
parsetest/shouldfail/conditional.c [new file with mode: 0644]

index faf702c..bedf872 100644 (file)
--- 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 (file)
index 0000000..de52c9d
--- /dev/null
@@ -0,0 +1,5 @@
+int main(int argc, char **argv)
+{
+       char *res = argc > 2 ? argv[1] : 42;
+       return (int) res;
+}