Warning, /sdk/clazy/tests/qstring-allocations/main.cpp.fixed.expected is written in an unsupported language. File is not indexed.
0001 #include <QtCore/QString> 0002 #include <QtCore/QStringList> 0003 #include <QtCore/QDebug> 0004 0005 const char * some_char_pointer_indirection(const char *) 0006 { 0007 return nullptr; 0008 } 0009 0010 const char * some_char_pointer() 0011 { 0012 return nullptr; 0013 } 0014 0015 void test() 0016 { 0017 QString s1; 0018 const char *cstring = "foo"; 0019 s1.contains(QLatin1String("string")); // Warning 0020 s1.contains(some_char_pointer()); // OK 0021 0022 QString s2 = QStringLiteral("string"); // Warning 0023 QString s3 = QStringLiteral("string"); // OK 0024 QString s4(some_char_pointer()); // OK 0025 0026 s1 += QLatin1String("foo"); // Warning 0027 s1 += QStringLiteral("foo"); // OK 0028 s1 += QLatin1String("foo"); // OK 0029 0030 QString s5 = QStringLiteral("BAR"); // Warning 0031 QString s6 = QStringLiteral("BAR"); // Warning 0032 QString s7 = QString::fromLatin1(some_char_pointer()); // OK 0033 QString s8 = QString::fromUtf8(some_char_pointer()); // OK 0034 QString s81 = QString::fromUtf8(some_char_pointer_indirection("foo")); // OK 0035 QString s123 = QString::fromLatin1(some_char_pointer_indirection("foo")); // OK 0036 0037 QString s9 = QStringLiteral("string"); // Warning 0038 s9 = QStringLiteral("string"); // Warning 0039 s9 = QLatin1String(some_char_pointer_indirection("foo")); // OK 0040 QString s10 = true ? QStringLiteral("string1") : QStringLiteral("string2"); // Warning 0041 s10 = true ? QStringLiteral("string1") : QStringLiteral("string2"); // Warning 0042 0043 QString s11 = QStringLiteral("foo"); // Warning 0044 QStringList stringList; 0045 stringList << QString::fromLatin1("foo", 1); // OK 0046 QString s12 = QLatin1String(""); // OK, QString is optimized for the empty case 0047 QString s = QLatin1String(cstring + sizeof("foo")); // OK 0048 s = QStringLiteral("bar %1").arg(1); // Warning 0049 s = QString::fromLatin1(true ? "foo" : "foo2").arg(1); // Warning 0050 s += QLatin1String( // Warning: Multi-line, to test FIXIT 0051 "foo" ); 0052 QString::fromLatin1(true ? cstring : "cstring"); // OK 0053 QString escaped = QStringLiteral("\\\\"); // Warning 0054 QString s13 = QStringLiteral("foo"); // Warning 0055 QString s14 = QLatin1String(""); // Warning 0056 QString s15 = QLatin1String(""); // Warning 0057 s15.startsWith(QLatin1String("ff")); // OK 0058 s15.startsWith(QLatin1String("ff")); // Warning, should be QLatin1String 0059 s15.contains(QLatin1String("ff")); // Warning, should be QStringLiteral 0060 s15.indexOf(QLatin1String("ff")); // Warning, should be QStringLiteral 0061 } 0062 0063 0064 0065 0066 0067 0068 0069 0070 struct A 0071 { 0072 A() : member(QStringLiteral("foo")) {} // Warning 0073 QString member; 0074 }; 0075 0076 struct A2 0077 { 0078 A2() : member(QStringLiteral("foo")) // OK 0079 , member2(QStringLiteral("foo")) {} // Warning 0080 void test(const QString &calendarType = QStringLiteral("gregorian") ); // Warning 0081 QString member; 0082 QString member2; 0083 }; 0084 0085 void test3() 0086 { 0087 QString s; 0088 if (s == QLatin1String("foo")) // Warning 0089 return; 0090 if (s == QStringLiteral("foo %1").arg(1)) // Warning 0091 return; 0092 } 0093 0094 void test4(const QString &) {} 0095 0096 void test5() 0097 { 0098 test4(QStringLiteral("foo")); // Warning 0099 QString s; 0100 s.contains(QLatin1String("a")); // Warning 0101 s.compare(QStringLiteral("a"), QLatin1String("a")); // Warning 0102 } 0103 0104 #include <exception> 0105 void exceptionTest() // Just to test a crash 0106 { 0107 try { 0108 0109 } catch (std::exception e) { 0110 0111 } 0112 } 0113 0114 QStringList returns_stringlist(QString) { return {}; } 0115 0116 void test_foreach() 0117 { 0118 foreach (const QString &s, returns_stringlist(QLatin1String("bar"))) // Warning 0119 { 0120 } 0121 } 0122 0123 void testCharsets() 0124 { 0125 QString s = QStringLiteral("é"); 0126 s += QStringLiteral("é"); 0127 s += QLatin1String("e"); 0128 s.compare(QStringLiteral("é"), QStringLiteral("e")); 0129 s.startsWith(QStringLiteral("é")); 0130 s.startsWith(QLatin1String("e")); 0131 foreach (const QString &s, returns_stringlist(QLatin1String("éÈ"))) { } 0132 QString s11 = QLatin1String("é"); 0133 0134 if (s == QLatin1String("foó")) 0135 return; 0136 if (s == QString::fromLatin1("foó %1").arg(1)) 0137 return; 0138 s.contains(QLatin1String("é")); 0139 s += QLatin1String( 0140 "fóó" ); 0141 QString s123 = QString::fromLatin1(some_char_pointer_indirection("fóó")); 0142 QString s9 = QLatin1String("stringéééé"); 0143 } 0144 0145 struct TestCharsets 0146 { 0147 TestCharsets() : member(QStringLiteral("é")) 0148 , member2(QLatin1String("é")) {} // Warning 0149 void test(const QString &calendarType = QLatin1String("éééé´e") ); 0150 void test2(); 0151 QString member; 0152 QString member2; 0153 }; 0154 0155 0156 0157 0158 0159 0160 0161 0162 0163 0164 0165 void moreShouldBeQLatin1String() 0166 { 0167 QString s; 0168 bool b = (s == QLatin1String("=")); 0169 if (s.startsWith(QLatin1String("Version=5"))) {} 0170 if (s.startsWith(QLatin1String("Version=5"))) {} // OK 0171 QString result = QLatin1String("Enum") + s; 0172 } 0173 0174 void TestCharsets::test2() 0175 { 0176 QString s = QString::fromLatin1("é"); // Can't fix this weird one 0177 QString s2 = QStringLiteral("é"); 0178 s2 += QLatin1String("é"); 0179 s2 += QStringLiteral("é"); 0180 s = QStringLiteral("á"); 0181 s += QStringLiteral("á"); 0182 QStringLiteral("á"); 0183 QStringList slist; 0184 slist << QStringLiteral("á") << QStringLiteral("a"); 0185 } 0186 0187 0188 0189 #if QT_MAJOR_VERSION == 5 0190 #include <QtCore/QRegExp> 0191 void testBlacklistedQRegExp() 0192 { 0193 QRegExp exp1("literal"); 0194 QRegExp exp2(QLatin1String("literal")); 0195 } 0196 #endif 0197 0198 0199 void charsetEdgeCase() 0200 { 0201 test4(QLatin1String("ááá")); 0202 } 0203 0204 void testQDebug() 0205 { 0206 qDebug() << "test"; // OK 0207 } 0208 0209 void testEmpty() 0210 { 0211 QStringList list = QStringList() << QStringLiteral("foo") << QLatin1String(""); 0212 } 0213 0214 0215 void test_bug358732() 0216 { 0217 QStringLiteral("foo").asprintf("0x%02X", 0x1E); // Warn and use QSL 0218 QStringLiteral("").asprintf("0x%02X", 0x1E); // Warn and use QSL 0219 } 0220 0221 0222 struct QTestData {}; 0223 0224 template<typename T> 0225 QTestData &operator<<(QTestData &data, const T &value); 0226 0227 void test_QTestData() 0228 { 0229 QTestData t; 0230 t << QStringLiteral("foo"); 0231 } 0232 0233 void test_QStringList_streamOp() 0234 { 0235 QStringList list; 0236 list << QStringLiteral("foo") << QStringLiteral("foo") << QStringLiteral("foo") << QStringLiteral("foo"); 0237 list += QStringLiteral("foo"); 0238 list += QStringLiteral("foo"); 0239 list += QStringLiteral("foo"); 0240 list += QStringLiteral("foo"); 0241 } 0242 0243 void testQLatin1String2Args() 0244 { 0245 QString s2 = QLatin1String("foo", 3); 0246 } 0247 0248 QString s = QStringLiteral("ö"); 0249 QString s2 = QString::fromUtf8("\xc3\xb6"); 0250 QString s3 = true ? "ö" : "\xc3\xb6"; 0251 0252 0253 // bug #391807 0254 Q_GLOBAL_STATIC_WITH_ARGS(const QString, strUnit, (QLatin1String("unit"))) // OK, since QStringLiteral doesn't work inside Q_GLOBAL_STATIC_WITH_ARGS 0255 0256 void testEmptyString() 0257 { 0258 QString s1, s2, s3; 0259 if (s1.isEmpty() && !s2.isEmpty() && s3 == QLatin1String("foo")) 0260 s1 = s3; 0261 }