diff options
author | Thomas Schmid <Thomas.Schmid@br-automation.com> | 2009-02-06 12:51:34 +0000 |
---|---|---|
committer | Christopher Li <sparse@chrisli.org> | 2009-07-17 23:06:22 +0000 |
commit | 801c6d64cae47d0c7ffc55c53a0f3c599bc0dcaf (patch) | |
tree | 71b3020dd5aafcc6c66898923d70bd56f0dd5ea7 /symbol.h | |
parent | fun with declarations and definitions (diff) | |
download | sparse-801c6d64cae47d0c7ffc55c53a0f3c599bc0dcaf.tar.gz sparse-801c6d64cae47d0c7ffc55c53a0f3c599bc0dcaf.tar.bz2 sparse-801c6d64cae47d0c7ffc55c53a0f3c599bc0dcaf.zip |
Fix implicit cast to float
Was:Re: Initializing float variables without type suffix)
> cast_to() seems fine.
>
> In expanding stage, cast_value() did not cast the constant
> correctly.
You're right, I also noticed this in the meantime.
The decision, whether newtype is int_type or fp_type is not made
correctly.
The following patch seems to work:
Fix implicit cast to float
Patch modified by Chris.
Signed-Off-By: Thomas Schmid <Thomas.Schmid@br-automation.com>
Signed-Off-By: Christopher Li <sparse@chrisli.org>
Diffstat (limited to 'symbol.h')
-rw-r--r-- | symbol.h | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -10,6 +10,7 @@ */ #include "token.h" +#include "target.h" /* * An identifier with semantic meaning is a "symbol". @@ -297,6 +298,37 @@ static inline int is_enum_type(const struct symbol *type) return (type->type == SYM_ENUM); } +static inline int is_type_type(struct symbol *type) +{ + return (type->ctype.modifiers & MOD_TYPE) != 0; +} + +static inline int is_ptr_type(struct symbol *type) +{ + if (type->type == SYM_NODE) + type = type->ctype.base_type; + return type->type == SYM_PTR || type->type == SYM_ARRAY || type->type == SYM_FN; +} + +static inline int is_float_type(struct symbol *type) +{ + if (type->type == SYM_NODE) + type = type->ctype.base_type; + return type->ctype.base_type == &fp_type; +} + +static inline int is_byte_type(struct symbol *type) +{ + return type->bit_size == bits_in_char && type->type != SYM_BITFIELD; +} + +static inline int is_void_type(struct symbol *type) +{ + if (type->type == SYM_NODE) + type = type->ctype.base_type; + return type == &void_ctype; +} + static inline int get_sym_type(struct symbol *type) { if (type->type == SYM_NODE) |