Hi Andrew,

I see. Thanks for your speedy reply for clearing my confusion!

Have a great day!

Best regards,
Haoxin

Andrew Pinski <pins...@gmail.com> 于2022年3月12日周六 12:33写道:

> On Fri, Mar 11, 2022 at 8:21 PM Haoxin Tu via Gcc <gcc@gcc.gnu.org> wrote:
> >
> > Dear developers,
> >
> > May I seek your confirmation to check whether the following program
> > triggers a true wrong-code issue or not? I don't want to make noise to
> the
> > bug repository so I'd like to seek your confirmation here first.
> >
> > The following case makes GCC outputs differ under  -O1 below vs -O1 above
> > optimization levels. Here is the program (s.c):
> > ```
> > #include <stdint.h>
> > union {
> > int32_t a;
> > uint16_t b;
> > } c;
> > static uint16_t *d = &c.b;
> > int32_t *e = &c.a;
> > int32_t **f = &e;
> > int32_t ***g = &f;
> > int32_t *h = &c.a;
> > int64_t i() {
> > int8_t j = 5;
> > *h = j;
> > ***g = *d;
> > return 0;
> > }
> > int main() {
> > c.a = 1;
> > c.b = 1;
> > i();
> > printf("%d\n", c.a);
> > }
> > ```
> >
> > ```
> > $gcc-trunk -O0 -w s.c ; ./a.out
> > 5
> > $gcc-trunk -O1 -w s.c ; ./a.out
> > 5
> > $gcc-trunk -O2 -w s.c ; ./a.out
> > 1
> > $gcc-trunk -O3 -w s.c ; ./a.out
> > 1
> > $gcc-trunk -Os -w s.c ; ./a.out
> > 1
> > ```
> >
> > What surprised me was that almost all GCC versions produce different
> > results (please check more details here: https://godbolt.org/z/vTzhhvnGE
> ).
> > Besides, clang also has the same issue with -O0 vs the above versions.
> So,
> > does this program have any UB? If not, I would like to file new bug
> reports
> > then. Thank you so much!
>
> Yes it looks like a strict aliasing issue though GCC does not
> implement some aliasing rules sometimes with unions, see PR 82224.
>
> Thanks,
> Adnrew Pinski
>
> >
> >
> > Best regards,
> > Haoxin
>

Reply via email to