From: PatR Date: Wed, 22 Sep 2021 14:59:36 +0000 (-0700) Subject: silence compiler warning in droppables() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7a7550f5383c7f78a2b4bbcd7bb7eeb61e187fcd;p=nethack silence compiler warning in droppables() Reported by entrez as a github issue for evilhack, 'gcc -2' issued warnings about droppables() possibly returning the address of a local variable (&dummy). It is mistaken; that never gets returned because of various checks being performed. But making 'dummy' be static adds negligible cost and should shut it up (not verified but no doubt about viability...). --- diff --git a/src/dogmove.c b/src/dogmove.c index cbb82c306..16c0b9d12 100644 --- a/src/dogmove.c +++ b/src/dogmove.c @@ -23,7 +23,19 @@ static void quickmimic(struct monst *); struct obj * droppables(struct monst *mon) { - struct obj *obj, *wep, dummy, *pickaxe, *unihorn, *key; + /* + * 'key|pickaxe|&c = &dummy' is used to make various creatures + * that can't use a key/pick-axe/&c behave as if they are already + * holding one so that any other such item in their inventory will + * be considered a duplicate and get treated as a normal candidate + * for dropping. + * + * This could be 'auto', but then 'gcc -O2' warns that this function + * might return the address of a local variable. It's mistaken, + * &dummy is never returned. 'static' is simplest way to shut it up. + */ + static struct obj dummy; + struct obj *obj, *wep, *pickaxe, *unihorn, *key; dummy = cg.zeroobj; dummy.otyp = GOLD_PIECE; /* not STRANGE_OBJECT or tools of interest */