Re: FreeBSD aflusning

From: Erik Cederstrand <none_at_erik--cederstrand.dk.lh.bsd-dk.dk>
Date: Thu, 4 Oct 2012 12:07:31 +0200
To: bsd-dk_at_bsd-dk.dk

Den 04/10/2012 kl. 11.31 skrev Jesper Louis Andersen <none_at_jesper.louis.andersen--gmail.com.lh.bsd-dk.dk>:
>
> Det kræver formentlig noget omskrivning for at gøre clang glad. Et
> hurtigt hack kunne være at checke for NULL i F_FLAGS case'en på 'val'
> og så panic'e programmet hvis det sker fordi det er en assertion. Det
> vil formentlig hinte clang om at den corner-case er håndteret.
>
> Alternativt, så skal man finde ud af hvad clang synes om parsekey(...,
> &value). Min umiddelbare intuition er at det er her clang ikke er i
> stand til at regne ud hvad der sker, så den skyder på at value er
> false, men type er F_FLAGS. Men jeg vædder med at slår du op hvad
> parse-key gør, så kan den kombination ikke forekomme :)

Tak for din udførlige udredning! Så lærte jeg noget nyt om C.

Mht. førstnævnte, så vil jeg give dig ret i, at man kunne indsætte en assert(). Men jeg er ike sikker på, at det bliver taget vel imod hos dem med commit rettigheder…

Det ser ud til, at du vinder væddemålet. Som jeg læser http://svn.freebsd.org/base/head/usr.sbin/mtree/misc.c returnerer parsekey() altid 1, når type er F_FLAGS (se "keylist" arrayet). Dermed er det clang, som er på afveje.

Jeg kunne sende en bug report til clang, men analyzeren har allerede vanskeligheder med at huske constraints mellem variable, se f.eks. http://llvm.org/bugs/show_bug.cgi?id=13426

Mvh Erik
Received on Thu 04 Oct 2012 - 12:07:35 CEST

This archive was generated by hypermail 2.2.0 : Wed 27 Mar 2013 - 10:40:16 CET