[cfe-dev] False warning in recent clang

James Dennett james.dennett at gmail.com
Fri Jun 22 04:59:35 PDT 2012


On Fri, Jun 22, 2012 at 4:30 AM, Konstantin Tokarev <annulen at yandex.ru> wrote:
> Hi all,
>
> After recent clang update I'm getting new warnings from Qt headers:
>
> /usr/local/Trolltech/Qt-4.8.0/include/QtCore/qsharedpointer_impl.h:595:43: warning: field is uninitialized when used here [-Wuninitialized]
>    inline QWeakPointer(X *ptr) : d(ptr ? d->getAndRef(ptr) : 0), value(ptr)
>                                          ^
>
> (caret is pointing at 'd' before '->getAndRef')
>
> Here is complete piece of subject code:
>
> template <class X>
> inline QWeakPointer(X *ptr) : d(ptr ? d->getAndRef(ptr) : 0), value(ptr)
> { }
>
> where getAndRef is static method, so value of d is not needed here. I assume this warning should not be emitted.

The warning seems valid, and the code should be fixed.
d->getAndRef(ptr) requires that d be evaluated even if getAndRef is
static, just as f()->getAndRef(ptr) would be required to call f(),
even though the result would be discarded.

-- James




More information about the cfe-dev mailing list