File indexing completed on 2024-05-12 17:13:25
0001 #include <QtCore/QList> 0002 #include <QtCore/QString> 0003 #include <QtCore/QStringList> 0004 #include <QtCore/QMap> 0005 #include <QtCore/QFile> 0006 #include <QtCore/QHash> 0007 #include <QtCore/QSet> 0008 0009 QList<int> getList() 0010 { 0011 return QList<int>(); 0012 } 0013 0014 void detach1() 0015 { 0016 getList().first(); // Warning 0017 } 0018 0019 void detach2() 0020 { 0021 getList().at(0); // OK 0022 } 0023 0024 void lvalue() 0025 { 0026 QStringList s; 0027 s.first(); // OK 0028 } 0029 0030 QStringList test_string() { return {}; } 0031 QStringList& test_string_ref() { static QStringList s; return s; } 0032 QStringList * test_string_ptr() { return {}; } 0033 const QStringList test_const_string() { return {}; } 0034 const QStringList & test_const_string_ref() { static QStringList s; return s; } 0035 const QStringList * test_const_string_ptr() { return {}; } 0036 0037 void qstrings() 0038 { 0039 QString s; 0040 s.toLatin1().data(); // OK, list isn't shared 0041 test_string().first(); // Warning 0042 test_const_string().first(); // OK 0043 test_const_string_ref().first(); // OK 0044 test_const_string_ptr()->first(); // OK 0045 0046 test_string().first(); // Warning 0047 test_string_ref().first(); // Warning 0048 test_string_ptr()->first(); // OK 0049 } 0050 0051 0052 void maps() 0053 { 0054 QMap<int, QStringList> map; 0055 map.value(0).first(); // OK, value() returns const T 0056 map[0].removeAll("asd"); // OK 0057 map.values().first(); // OK, QMap::values() isn't shared 0058 } 0059 0060 void more() 0061 { 0062 QFile::encodeName("foo").data(); 0063 } 0064 0065 void foo(QStringList *list) 0066 { 0067 auto it = list->begin(); 0068 } 0069 0070 typedef QMap<int, QStringList> StringMap; 0071 Q_GLOBAL_STATIC(StringMap, sISOMap) 0072 void test_global_static() 0073 { 0074 sISOMap()->insert(1, QStringList()); 0075 sISOMap->insert(1, QStringList()); 0076 } 0077 0078 void test_ctor() 0079 { 0080 QStringList().first(); 0081 QByteArray key = "key"; 0082 QByteArray(key + key).data(); 0083 } 0084 0085 struct TestThis : public QList<int> 0086 { 0087 void foo() 0088 { 0089 begin(); 0090 } 0091 }; 0092 0093 class Foo 0094 { 0095 public: 0096 QStringList list; 0097 }; 0098 0099 Foo * getFoo() { return new Foo(); } 0100 Foo getFoo2() { return Foo(); } 0101 0102 void testThroughPointer() 0103 { 0104 Foo *f; 0105 f->list.first(); // OK 0106 getFoo()->list.first(); // OK 0107 getFoo2().list.first(); // OK 0108 } 0109 0110 QMap<int,int> getMap() { return {}; }; 0111 void testWriteMethod() 0112 { 0113 getMap().insert(1,1); // Warning 0114 int a = getMap().take(1); // Warning 0115 } 0116 0117 void testSubscriptOperator() 0118 { 0119 getList()[0]; // Warning 0120 if (test_string()[0].isEmpty()) {} // Warning 0121 getMap()[0]; // Warning 0122 auto m = getMap(); 0123 m[0]; 0124 } 0125 0126 typedef QList<int> IntList; 0127 IntList getIntList() { return {}; } 0128 void testTypedef() 0129 { 0130 getIntList()[0]; // Warning 0131 } 0132 0133 QStringList getStringList() { return {}; } 0134 QMultiMap<int,int> getMultiMap() { return {}; } 0135 void testDerivedClass() 0136 { 0137 getStringList().first(); // Warning 0138 getStringList()[0]; // Warning 0139 getMultiMap().begin(); // Warning 0140 getMultiMap().insert(1, 1); // Warning 0141 } 0142 0143 void testQStringListSpecificMethods() 0144 { 0145 getStringList().removeDuplicates(); 0146 } 0147 0148 QString getString() { return ""; } 0149 void testQString() 0150 { 0151 getString().begin(); // Warning 0152 getString()[1]; // Warning 0153 } 0154 0155 extern QHash<QString, int> &initializers(); 0156 QString getStr() { return QString(); } 0157 0158 static auto bar = [] { 0159 return initializers().insert(getStr(), 1); // OK 0160 }(); 0161 0162 0163 QSet<int> getSet() { return {}; } 0164 0165 void testIntersect() 0166 { 0167 QSet<int> other; 0168 auto s = getSet().intersect(other); // OK 0169 }