[LLVMbugs] [Bug 17650] New: Clang fails to build Qt applications using a foreach convenience macro

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Oct 22 05:36:50 PDT 2013


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

            Bug ID: 17650
           Summary: Clang fails to build Qt applications using a foreach
                    convenience macro
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: tobias.hunger at gmail.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Qt offers a convenience macro called foreach to iterate over values of a list,
etc. This expands to the following:

for (QForeachContainer<__typeof__(m_components)> _container_(m_components);
!_container_.brk && _container_.i != _container_.e; __extension__ ({
++_container_.brk; ++_container_.i; })) for (QObject *component =
*_container_.i;; __extension__ ({--_container_.brk; break;})) {

Clang will now complain about this with the following error message:

... error: 'break' statement not in loop or switch statement body

which is indeed what is happening. I am not positive whether this is legal C++
or not, but this is used in Qt since before 2011 and has never been a problem
so far on any of the supported platforms. 

I assume this is introduced by
https://llvm.org/svn/llvm-project/cfe/trunk@193073
which removes a test case similar to what is used in Qt from the
trunk/test/Analysis/dead-stores.c. That commit message claims that GCC rejects
this, but it does not using gcc <= 4.8.1.

Please reintroduce this behavior (or at least provide a switch to turn it off)
to avoid breaking the build of (almost) *all* Qt applications in existence
using clang.

Yes, we should fix Qt to not do this, but we can not retro-actively fix all the
Qt sources out there and people will encounter this issue when building any Qt
source code with clang.

Also note that http://llvm.org/bugs/show_bug.cgi?id=7189 fixes the Qt foreach
macro, so there was work done to introduce this behavior in the first place.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20131022/2cbf63fb/attachment.html>


More information about the llvm-bugs mailing list