widl: Check for mismatched types in ?: expressions.
diff --git a/tools/widl/expr.c b/tools/widl/expr.c
index 60e3a50..7012382 100644
--- a/tools/widl/expr.c
+++ b/tools/widl/expr.c
@@ -649,6 +649,10 @@
         check_scalar_type(expr_loc, cont_type, result_first.type);
         result_second = resolve_expression(expr_loc, cont_type, e->u.ext);
         result_third = resolve_expression(expr_loc, cont_type, e->ext2);
+        check_scalar_type(expr_loc, cont_type, result_second.type);
+        check_scalar_type(expr_loc, cont_type, result_third.type);
+        if (!is_ptr(result_second.type) ^ !is_ptr(result_third.type))
+            error_loc_info(&expr_loc->v->loc_info, "type mismatch in ?: expression\n" );
         /* FIXME: determine the correct return type */
         result = result_second;
         result.is_variable = FALSE;