File indexing completed on 2024-05-05 05:41:39

0001 #include <QtCore/QString>
0002 #include <QtCore/QByteArray>
0003 
0004 QByteArray returnsByteArray()
0005 {
0006     return QByteArray();
0007 }
0008 
0009 const QByteArray returnsConstByteArray()
0010 {
0011     return QByteArray();
0012 }
0013 
0014 struct A
0015 {
0016     QByteArray member;
0017     const char * returnsFromMember()
0018     {
0019         return member.data(); // OK
0020     }
0021 
0022     const char * returnsFromMember2()
0023     {
0024         return member.constData(); // OK
0025     }
0026 };
0027 
0028 const char * returnsFromLocal()
0029 {
0030     QByteArray b;
0031     return b.data(); // Warn
0032 }
0033 
0034 const char * returnsFromLocal2()
0035 {
0036     QByteArray b;
0037     return b.constData(); // Warning
0038 }
0039 
0040 const char * returnsFromConstLocal()
0041 {
0042     const QByteArray b;
0043     return b.data(); // OK
0044 }
0045 
0046 const char * returnsFromConstLocalPtr()
0047 {
0048     const QByteArray *b;
0049     return b->data(); // OK
0050 }
0051 
0052 const char * returnsFromConstLocalPtr2()
0053 {
0054     QByteArray *const b = nullptr;
0055     return b->data(); // Warn
0056 }
0057 
0058 const char * returnsFromConstLocal2()
0059 {
0060     const QByteArray b;
0061     return b.constData(); // OK
0062 }
0063 
0064 const char * returnsFromStaticLocal()
0065 {
0066     static QByteArray b;
0067     return b.data(); // OK
0068 }
0069 
0070 const char * returnsFromStaticLocal2()
0071 {
0072     static QByteArray b;
0073     return b.constData(); // OK
0074 }
0075 
0076 const char * returnsFromTemporary()
0077 {
0078     return returnsByteArray().data(); // Warn
0079 }
0080 
0081 const char * returnsFromTemporary2()
0082 {
0083     return returnsConstByteArray().data(); // Ok
0084 }
0085 
0086 const char * returnsFromTemporary3()
0087 {
0088     QString s;
0089     return s.toUtf8().constData(); // Warn
0090     return s.toUtf8().data(); // Warn
0091     return s.toLatin1().data(); // Warn
0092     return s.toLatin1().constData(); // Warn
0093 }
0094 
0095 const char * returnsByteArrayCasted()
0096 {
0097     return returnsByteArray(); // Warn
0098 }
0099 
0100 QString getString() { return QString(); }
0101 const char * returnsFromTemporary4()
0102 {
0103     return getString().toUtf8().constData(); // Warn
0104     return getString().toUtf8().data(); // Warn
0105     return getString().toLatin1().data(); // Warn
0106     return getString().toLatin1().constData(); // Warn
0107 }
0108 
0109 QByteArray castBackToByteArray()
0110 {
0111     QByteArray b;
0112     return b.data(); // OK
0113     return getString().toUtf8().constData(); // OK
0114     return getString().toUtf8().data(); // OK
0115     return getString().toLatin1().data(); // OK
0116     return getString().toLatin1().constData(); // OK
0117 }
0118 
0119 
0120 void testAssignment()
0121 {
0122     QByteArray b;
0123     QString str;
0124     const char *c1 = b.data(); // OK
0125     const char *c2 = b.constData(); // OK
0126     const char *c3 = b; // OK
0127     const char *c4 = str.toUtf8().data(); // Warn
0128     const char *c5 = str.toLatin1().data(); // Warn
0129     const char *c6 = str.toUtf8().constData(); // Warn
0130     const char *c7 = str.toLatin1().constData(); // Warn
0131     const char *c8 = str.toUtf8(); // Warn
0132     const char *c9 = str.toLatin1(); // Warn
0133     const char *c10 = returnsByteArray(); // Warn
0134     const char* buffer = QByteArray("Hello").constData(); // Warn
0135 }
0136 
0137 const char * testByParam(QByteArray &ba, QString &foo, QByteArray ba2)
0138 {
0139     return ba.data(); // OK
0140     return ba.constData(); // OK
0141     return ba; // OK
0142     return ba2; // Warn
0143     return foo.toLatin1().data(); // Warn
0144 }