http://bugs.llvm.org/show_bug.cgi?id=32595

            Bug ID: 32595
           Summary: gcc-compat check wrongly complains about differing
                    behaviour
           Product: clang
           Version: 4.0
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangb...@nondot.org
          Reporter: roy...@freebsd.org
                CC: llvm-bugs@lists.llvm.org

Created attachment 18260
  --> http://bugs.llvm.org/attachment.cgi?id=18260&action=edit
Sample test case

Hello,

The attached code triggers the following clang warning:

test.c:25:16: warning: 'break' is bound to loop, GCC binds it to switch
[-Wgcc-compat]
        while (foo(++i)) {
               ^
test.c:14:9: note: expanded from macro 'foo'
        break;          \
        ^

I haven't been able to spot what this different behaviour is, I've compiled the
attached test with clang 3.8, gcc 4.6 and gcc 5.4 and the output is always the
same:

D
i: 1
D
i: 2
D
i: 3
E
END

Also, I'm not sure what clang complains about, I don't think there's any
ambiguity here, and the "break" should apply to the inner switch. Could someone
clarify what's wrong with this, and how this should be fixed?

Note that the attached test.c is a simplification of an issue seen while
building Xen, in which case using a macro makes sense [0][1].

Roger.

[0]
http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/arch/x86/hvm/dm.c;h=d72b7bd8357e9d7f37be4f3ea0d1e6eac1ab4540;hb=refs/heads/staging#l411
[1]
http://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/include/asm-x86/atomic.h;h=2fbe70551898bf4e8a866d9339eaf20d91991f9b;hb=refs/heads/staging#l46

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to