[llvm-dev] broken C code only when optimized "-O2"

James Dutton via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 21 10:44:45 PST 2021


On Tue, 21 Dec 2021 at 16:30, Adrian Moreno via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
>
> Hello,
>
> I need some help understanding what might be wrong with a piece of code from the
> openvswitch project. By ${subject} I'm not suggesting there's a problem in
> clang, gcc also shows the same behavior so it's likely our code is broken. I am
> kindly asking for help to understand/troubleshoot the problem.
>
> Summary: It seems that certain interaction between two main openvswitch data
> structures, when optimized ("-O2 -flto=auto") is broken.
> The two data structures are:
>
> hmap: https://github.com/openvswitch/ovs/blob/master/include/openvswitch/hmap.h
> list: https://github.com/openvswitch/ovs/blob/master/include/openvswitch/list.h
>
> I've reproduced the problem outside of openvswitch daemon using a short C
> program (attached)
>
> Code snippet:
>
...

It is quite obvious that the code is wrong.
Can't you spot the problem with this?:
     member1 = malloc(sizeof *member1);
     member2 = malloc(sizeof *member2);
     memset(member1, 0, sizeof (struct member));
     memset(member2, 0, sizeof (struct member));


More information about the llvm-dev mailing list