diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-03-11 14:48:44 +0100 |
|---|---|---|
| committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-03-27 16:12:27 +0200 |
| commit | e6f52d5bb67d6941b985a45b08bf87c305e3ba5b (patch) | |
| tree | 896dbc0df199cbe13c9bc49b2cbb2fcd06334939 | |
| parent | c1a53a868ebafd1d134e4a77c86074b9d07e4281 (diff) | |
| download | sparse-dev-e6f52d5bb67d6941b985a45b08bf87c305e3ba5b.tar.gz | |
fix cast to pointer to floating-point
By mistake, a cast to floating-pointer pointer was
created as OP_FPCAST instead of OP_PTRCAST.
Fix this by adding the missing 'else'.
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
| -rw-r--r-- | linearize.c | 3 | ||||
| -rw-r--r-- | validation/fp-vs-ptrcast.c | 13 |
2 files changed, 14 insertions, 2 deletions
diff --git a/linearize.c b/linearize.c index 5199b6b0..ae8640a9 100644 --- a/linearize.c +++ b/linearize.c @@ -1118,8 +1118,7 @@ static struct instruction *alloc_cast_instruction(struct symbol *src, struct sym base = base->ctype.base_type; if (base != &void_ctype) opcode = OP_PTRCAST; - } - if (base->ctype.base_type == &fp_type) + } else if (base->ctype.base_type == &fp_type) opcode = OP_FPCAST; return alloc_typed_instruction(opcode, ctype); } diff --git a/validation/fp-vs-ptrcast.c b/validation/fp-vs-ptrcast.c new file mode 100644 index 00000000..817aee5c --- /dev/null +++ b/validation/fp-vs-ptrcast.c @@ -0,0 +1,13 @@ +float *f01(void* p) +{ + return p; +} + +/* + * check-name: fp-vs-ptrcast + * check-command: test-linearize -Wno-decl $file + * check-output-ignore + * + * check-output-excludes: fpcast + * check-output-contains: ptrcast + */ |
