Handle ?: in is_address_constant().
authorChristoph Mallon <christoph.mallon@gmx.de>
Thu, 11 Jun 2009 09:29:28 +0000 (09:29 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Thu, 11 Jun 2009 09:29:28 +0000 (09:29 +0000)
[r26127]

ast.c
parser.c

diff --git a/ast.c b/ast.c
index 2f7ac89..73c05c0 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -1764,6 +1764,19 @@ bool is_address_constant(const expression_t *expression)
                        is_address_constant(expression->array_access.array_ref);
        }
 
+       case EXPR_CONDITIONAL: {
+               expression_t *const c = expression->conditional.condition;
+               if (!is_constant_expression(c))
+                       return false;
+
+               if (fold_constant_to_bool(c)) {
+                       expression_t const *const t = expression->conditional.true_expression;
+                       return is_address_constant(t != NULL ? t : c);
+               } else {
+                       return is_address_constant(expression->conditional.false_expression);
+               }
+       }
+
        default:
                return false;
        }
index 285e9a4..97078ca 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -1877,7 +1877,7 @@ static initializer_t *parse_scalar_initializer(type_t *type,
        mark_vars_read(expression, NULL);
        if (must_be_constant && !is_initializer_constant(expression)) {
                errorf(&expression->base.source_position,
-                      "Initialisation expression '%E' is not constant",
+                      "initialisation expression '%E' is not constant",
                       expression);
        }