[ekg2-devel] lists3 a sprawdzanie typów [było: r4089 - trunk/ekg:?trunk/ekg/dynstuff.h]
Jakub Zawadzki
darkjames w darkjames.ath.cx
Pon, 14 Lip 2008, 14:48:05 CEST
On Sun, Jul 13, 2008 at 09:13:14PM +0100, Marcin Owsiany wrote:
> On Fri, Jul 11, 2008 at 11:58:24PM +0200, Wiesław Ochmiński wrote:
> > też nie sprawdzała żadnego typu tylko rzutowała list typu cokolwiek_t na
> > (list_t *). Konstrukcja w (void *) jest o tyle lepsza, że w czasie
> > kompilacji nie daje ostrzeżenia:
> >
> > warning: dereferencing type-punned pointer will break strict-aliasing rules
>
> Ano właśnie, o tyle lepsza, czy o tyle gorsza?
>
> Wydaje mi się, że ukrycie tego ostrzeżenia może utrudnić rozwikłanie
> problemów, jakie mogą pojawić się przy agresywnej optymalizacji.
A masz pomysl jak uniknac warningow nie przywracajac starego kodu
(ktory korzystal z list_t)
Ja ostatnio napisalem dynstuff_inline.h i zaczalem przepisywac stary kod
na nowy. (docelowo makra z dynstuff.h maja wyleciec)
Bez uzyciu DYNSTUFF_USE_LIST3 jest wszystko ok, jak sie wlaczy to
rzutuje na (void *) zeby uniknac warningow.
Jak dla mnie moznaby dodac:
assert ( &(lista->next) == lista)
albo wariant:
assert ( &(lista->next) == &(((list_t) lista)->next))
Wtedy bysmy sie zabezpieczylili przed bledami ze next nie jest pierwszym
elementem.. Tylko jak na razie nikt takiego bledu nie zrobil.
> A z takimi już w ekg2 mieliśmy do czynienia (w okolicach kodu dot. obsługi
> unicode).
Swoja droga wtedy gcc nie plulo zadnych warningow.
Więcej informacji o liście dyskusyjnej ekg2-devel