Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Thiago Adams Newsgroups: comp.lang.c Subject: Re: Fixing a sample from K&R book using cake static analyser Date: Sat, 22 Jun 2024 17:32:36 -0300 Organization: A noiseless patient Spider Lines: 44 Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sat, 22 Jun 2024 22:32:37 +0200 (CEST) Injection-Info: dont-email.me; posting-host="11bc32a71a426a96af0097ab1f695acf"; logging-data="4129256"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX199+q2W/T9ZPc4hxWuAfi34n6GmFlgi+GE=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:CLP6oZ0Y6ou8ui7U/REfdaZUiVE= In-Reply-To: Content-Language: en-GB Bytes: 2631 Link for the sample using GCC and CLANG (no warnings in both) GCC https://godbolt.org/z/rGre3hbE1 CLANG https://godbolt.org/z/ez114sEMW For this other sample, the compiler needs to track the state of p inside conditional expressions. This check is wrong (p || p->text) cake and GCC shows that. #pragma safety enable #include #include struct X { char * _Owner _Opt text; }; int main() { struct X * _Owner _Opt p = calloc(1, sizeof * p); if (p || p->text){ p->text = strdup("a"); } free(p->text); free(p); } cake http://thradams.com/cake/playground.html?code=CiNwcmFnbWEgc2FmZXR5IGVuYWJsZSAKCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IFggewogIGNoYXIgKiBfT3duZXIgX09wdCB0ZXh0Owp9OwoKaW50IG1haW4oKSB7ICAgCiAgIHN0cnVjdCBYICogX093bmVyIF9PcHQgcCA9IGNhbGxvYygxLCBzaXplb2YgKiBwKTsKICAgaWYgKHAgfHwgcC0%2BdGV4dCl7ICAgCiAgICAgcC0%2BdGV4dCA9IHN0cmR1cCgiYSIpOyAgICAgCiAgIH0KICAgZnJlZShwLT50ZXh0KTsKICAgZnJlZShwKTsgIAp9CgoKCg%3D%3D&to=-1&options= GCC https://godbolt.org/z/4jdc7r9r3 GCC does NOT detects this one https://godbolt.org/z/T6GhfzrKT and cake does http://thradams.com/cake/playground.html?code=CiNwcmFnbWEgc2FmZXR5IGVuYWJsZSAKCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IFggewogIGNoYXIgKiBfT3duZXIgX09wdCB0ZXh0Owp9OwoKaW50IG1haW4oKSB7ICAgCiAgIHN0cnVjdCBYICogX093bmVyIF9PcHQgcCA9IGNhbGxvYygxLCBzaXplb2YgKiBwKTsKICAgaWYgKHAgKXsgICAKICAgICBwLT50ZXh0ID0gc3RyZHVwKCJhIik7ICAgICAKICAgfQogICAvL2ZyZWUocC0%2BdGV4dCk7CiAgIGZyZWUocCk7ICAKfQoKCgo%3D&to=-1&options=