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 }