Handle implicit casts from 0 to pointers in comparisons.
authorChristoph Mallon <christoph.mallon@gmx.de>
Sat, 17 Nov 2007 14:40:38 +0000 (14:40 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Sat, 17 Nov 2007 14:40:38 +0000 (14:40 +0000)
[r18443]

parser.c

index 43e951b..d3dc554 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -3118,6 +3118,17 @@ static void semantic_comparison(binary_expression_t *expression)
                expression->left  = create_implicit_cast(left, arithmetic_type);
                expression->right = create_implicit_cast(right, arithmetic_type);
                expression->expression.datatype = arithmetic_type;
+       } else if (type_left->type  == TYPE_POINTER &&
+                  type_right->type == TYPE_POINTER) {
+               /* TODO check compatibility */
+       } else if (type_left->type == TYPE_POINTER) {
+               expression->right = create_implicit_cast(right, type_left);
+       } else if (type_right->type == TYPE_POINTER) {
+               expression->left = create_implicit_cast(left, type_right);
+       } else {
+               type_error_incompatible("invalid operands in comparison",
+                                       expression->expression.source_position,
+                                       type_left, type_right);
        }
        expression->expression.datatype = type_int;
 }