[Interest] Klocwork errors in Qt

Thiago Macieira thiago.macieira at intel.com
Tue Dec 3 08:08:43 CET 2019


On Monday, 2 December 2019 18:53:14 PST Ramakanth Kesireddy wrote:
> We got below errors in Qt 5.13 using C++ QWidgets while running static code
> analysis withKlocwork:
> 
> 1)Address of a local variable is returned via return statement expression
> 'QStringBuilder<QStringBuilder<const char*,QString>,const char[2]>(a,
> &b).b'.
> 2)Address of a local variable is returned via return statement expression
> 'QStringBuilder<QStringBuilder<const char*,QString>,const char[2]>(a, &b).b'
> 3)Address of a local variable is returned via return statement expression
> 'QStringBuilder<const char[2],QString>(&a, b).a'.
> 
> pointing to the below source @
> https://github.com/qt/qtbase/blob/dev/src/corelib/text/qstringbuilder.h
> 
> template <typename A, typename B>
> QStringBuilder<typename QConcatenable<A>::type, typename
> QConcatenable<B>::type>
> operator%(const A &a, const B &b)
> {
>    return QStringBuilder<typename QConcatenable<A>::type, typename
> QConcatenable<B>::type>(a, b);
> }
> 
> We are concatenating two QStrings using % which might lead to the above
> errors:
> For eg: eventString = eventString % eventState
> 
> Do you recommend to use QString(%1%2").arg( eventString ).arg( eventState )
> instead to resolve above errors or ignore the Klocwork errors reported?

No, there's no need. QStringBuilder works just fine and has been working for 
over 10 years. Either there's a problem somewhere in your code that you didn't 
show to us or it s a Klocwork false positive.

Hint: do not use "auto" to detect the type when QStringBuilder is active. 
Don't write:
    auto str = a + b;
instead, write:
    QString str = a + b;

> 4)
> https://github.com/radekp/qt/blob/master/src/corelib/tools/qsharedpointer_im
> pl.h> 
>  inline Basic(Qt::Initialization) { }
>  
>         // ~Basic();
> 
> 'this->value' is not initialized in this constructor.
> List of initiations may be incomplete.

The only value in the Qt::Initialization enum is Qt::Uninitialized. So that 
tmeans this is intentional. Ignore this report.

PS: the links above seem to be Qt 4. That's obviously not supported. My 
answers are about Qt 5. Both QStringBuilder and QSharedPointer have received a 
few fixes in the last 7 years.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products





More information about the Interest mailing list