although the literals, label addresses are not constant expression, they are address...
authorMatthias Braun <matze@braunis.de>
Fri, 30 Jan 2009 10:29:25 +0000 (10:29 +0000)
committerMatthias Braun <matze@braunis.de>
Fri, 30 Jan 2009 10:29:25 +0000 (10:29 +0000)
[r25401]

ast.c
ast.h

diff --git a/ast.c b/ast.c
index 6457bb4..7c1ea6a 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -1686,6 +1686,12 @@ static bool is_object_with_linker_constant_address(const expression_t *expressio
 bool is_address_constant(const expression_t *expression)
 {
        switch (expression->kind) {
+       case EXPR_STRING_LITERAL:
+       case EXPR_WIDE_STRING_LITERAL:
+       case EXPR_FUNCNAME:
+       case EXPR_LABEL_ADDRESS:
+               return true;
+
        case EXPR_UNARY_TAKE_ADDRESS:
                return is_object_with_linker_constant_address(expression->unary.value);
 
diff --git a/ast.h b/ast.h
index 9a511fb..453fc4d 100644 (file)
--- a/ast.h
+++ b/ast.h
@@ -117,6 +117,10 @@ bool is_constant_initializer(const initializer_t *initializer);
  */
 bool is_constant_expression(const expression_t *expression);
 
+/**
+ * An object with a fixed but at compiletime unknown adress which will be known
+ * at link/load time.
+ */
 bool is_address_constant(const expression_t *expression);
 
 long fold_constant(const expression_t *expression);