[Development] Clang (trunk) no longer builds Qt applications

Tobias Hunger tobias.hunger at gmail.com
Wed Oct 23 11:32:14 CEST 2013


Good news: This was fixed again in revision 193170 in Clang. So this
was indeed just a temporary hick-up in Clang.

That is what you get for following trunk:-)

Link to that revision:
http://llvm.org/viewvc/llvm-project?view=revision&revision=193170

2013/10/22 Olivier Goffart <olivier at woboq.com>:
> On Tuesday 22 October 2013 15:44:00 Simon Hausmann wrote:
>> On Tuesday 22. October 2013 15.35.24 Tobias Hunger wrote:
>> > On 22.10.2013 15:31, Nicolás Alvarez wrote:
>> > > I don't think the standard is relevant here. The C++ standard doesn't
>> > > and can't say anything about whether 'break' and 'continue' are allowed
>> > > in a statement expression inside the 'for' header, because statement
>> > > expressions don't exist in the standard to begin with; they are a gcc
>> > > extension. Clang has to reverse engineer the exact semantics from gcc
>> > > behavior.
>> >
>> > So can we avoid relying on GCC extensions here?
>> >
>> > I doubt that we can ask clang to be 100% compatible with GCC anyway and
>> > making that a requirement for Qt to function properly is not what we
>> > should aim for IMHO.
>>
>> The code in question is behind "#if defined(Q_CC_GNU)", so as long as clang
>> triggers that it has to be compatible with gcc's extensions.
>>
>> If it turns out that this isn't possible - i.e. they choose not to be
>> compatible in this case, then we need to use the slower fall-back code that
>> exists.
>
> Interrestingly, back while clang was still beta and tried to get up to speed
> with gcc, there was a similar problem in which clang miscompiled that break.
> http://llvm.org/bugs/show_bug.cgi?id=7189
> This was quickly fixed, and compatibility with GCC in that extention.
>
> This is probably just a temporary bug of clang's trunk, and I beleive the gcc
> behaviour will be restored.
>
>
> Now with C++11, we don't need the extension and we can morph the foreach into
> a range based for:
>
> // return a const copy of the container
> template<typename T> const T qForeachHelper(const T &c) { return c; }
>
> #define foreach(variable, container)  for(variable : qForeachHelper(container))
>
> I think this should have the same semantic as currently
>
> If clang decide not to restore the gcc behaviour, then we can still fallback
> to the slightly slower generic implementation in the #else when not compiling
> with c++11  (I did not manage to get rid of the warning with the __extension__
> keyword)
>
> --
> Olivier
>
> Woboq - Qt services and support - http://woboq.com - http://code.woboq.org
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development



More information about the Development mailing list