From 8f2fe47e7c42914a261f6481ce20664ff7249378 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Mon, 17 Mar 2008 14:20:36 +0000 Subject: [PATCH] BugFix: - is_constant_address(): dereferencing function is a NOP [r18959] --- ast.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ast.c b/ast.c index f2c2551..3184cf6 100644 --- a/ast.c +++ b/ast.c @@ -22,6 +22,7 @@ #include "ast_t.h" #include "symbol_t.h" #include "type_t.h" +#include "parser.h" #include #include @@ -1447,6 +1448,14 @@ bool is_address_constant(const expression_t *expression) case EXPR_UNARY_TAKE_ADDRESS: return is_object_with_constant_address(expression->unary.value); + case EXPR_UNARY_DEREFERENCE: { + type_t *real_type = revert_automatic_type_conversion(expression->unary.value); + /* dereferencing a function is a NOP */ + if(is_type_function(real_type)) { + return is_address_constant(expression->unary.value); + } + } + case EXPR_UNARY_CAST: return is_type_pointer(skip_typeref(expression->base.type)) && (is_constant_expression(expression->unary.value) @@ -1513,8 +1522,8 @@ bool is_constant_expression(const expression_t *expression) case EXPR_UNARY_PREFIX_DECREMENT: case EXPR_UNARY_BITFIELD_EXTRACT: case EXPR_UNARY_ASSUME: /* has VOID type */ - case EXPR_UNARY_DEREFERENCE: case EXPR_UNARY_TAKE_ADDRESS: + case EXPR_UNARY_DEREFERENCE: case EXPR_BINARY_ASSIGN: case EXPR_BINARY_MUL_ASSIGN: case EXPR_BINARY_DIV_ASSIGN: -- 2.20.1