aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/builtin.c
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2022-05-31 13:53:18 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2022-05-31 13:53:18 +0200
commit56afb504c0b917a2563b44fabe2f1e92e4c14287 (patch)
tree73cca4ee011daee4ab40a7d19db2bb91b4307682 /builtin.c
parent5a0004b591e311cb840633144087dee6ecdade17 (diff)
parent3d1d65bfe6dad089b9c2a8d69f36ba5301a9509c (diff)
downloadsparse-dev-56afb504c0b917a2563b44fabe2f1e92e4c14287.tar.gz
Merge branch 'fixes' into master
* fix zero/sign extension of integer character constants * handle clang's option "-meabi gnu" * fix infinite loop when expanding __builtin_object_size() with self-init vars
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/builtin.c b/builtin.c
index 8e1d2d7e..3a29c3ae 100644
--- a/builtin.c
+++ b/builtin.c
@@ -546,11 +546,19 @@ static int expand_object_size(struct expression *expr, int cost)
// a deref is just intermediate variable
// and so the offset needs to be zeroed.
if (arg->op == '*') {
+ struct expression *parent = arg;
arg = arg->unop;
off = 0;
switch (arg->type) {
case EXPR_SYMBOL:
arg = arg->symbol->initializer;
+ if (arg == parent) {
+ // stop at self-initialized vars
+ // and do not expand them.
+ arg = NULL;
+ val = -1;
+ break;
+ }
continue;
default:
break;