File indexing completed on 2024-04-28 05:38:43
0001 #include <QtCore/QVector> 0002 #include <QtCore/QHash> 0003 #include <QtCore/QQueue> 0004 #include <QtCore/QVarLengthArray> 0005 #include <vector> 0006 0007 0008 0009 void local_vector() 0010 { 0011 QVector<int> vec; 0012 for (int i = 0; i < 10; ++i) { 0013 vec << i; // Test #1: Warning 0014 vec.append(i); // Test #2: Warning 0015 } 0016 0017 QVector<int> vec1; 0018 vec1.reserve(10); 0019 for (int i = 0; i < 10; ++i) { 0020 vec1 << i; // Test #3: No warning 0021 vec1.append(i); // Test #4: No warning 0022 } 0023 0024 QVector<int> vec2; 0025 for (int i = 0; i < 10; ++i) { 0026 if (true) { 0027 vec1 << i; // Test #5: No warning 0028 vec1.append(i); // Test #6: No warning 0029 } 0030 } 0031 0032 for (int i = 0; i < 10; ++i) { 0033 QVector<int> v; 0034 v << 1; // OK 0035 } 0036 } 0037 0038 void non_local_vector(QVector<int> &vec) 0039 { 0040 // Test #7: No warning 0041 for (int i = 0; i < 10; ++i) { 0042 vec << i; 0043 } 0044 } 0045 0046 bool returns_bool() 0047 { 0048 return true; 0049 } 0050 0051 unsigned int returns_uint() { return 0; } 0052 int returns_int() { return 0; } 0053 long long returns_long() { return 0; } 0054 0055 void test_complex_expressions() 0056 { 0057 QVector<int> v; 0058 int a987r[10]; 0059 for (int i = 0; a987r[i] == 1; ++i) 0060 v << i; // OK 0061 0062 for (int i = 0; returns_bool(); ++i) 0063 v << i; // OK 0064 0065 QVector<int> v2, v3; 0066 for (int i = 0; i < v2.size(); ++i) 0067 v3 << v3[i]; // Warning 0068 0069 QVector<int> v4, v5; 0070 for (int i = 0; i < returns_uint(); ++i) 0071 v4 << v5[i]; // Warning 0072 0073 QVector<int> v6, v7; 0074 for (int i = 0; i < returns_int(); ++i) 0075 v6 << v7[i]; // Warning 0076 0077 QVector<int> v8, v9; 0078 for (int i = 0; i < returns_long(); ++i) 0079 v8 << v9[i]; // Warning 0080 } 0081 0082 void test_nesting() 0083 { 0084 QVector<int> v; 0085 0086 while (returns_bool()) { 0087 for (int i = 0; i < 10; ++i) 0088 v << i; // OK 0089 } 0090 0091 while (returns_bool()) { 0092 QVector<int> v2; 0093 for (int i = 0; i < 10; ++i) 0094 v2 << i; // Warning 0095 } 0096 0097 QVector<int> v3; 0098 // Too many levels, this is ok, unless all of the cond expressions where literals but that's unlikely 0099 for (int i = 0; i < 10; ++i) { 0100 for (int i = 0; i < 10; ++i) { 0101 for (int i = 0; i < 10; ++i) { 0102 for (int i = 0; i < 10; ++i) { 0103 v3 << i; // OK 0104 } 0105 } 0106 } 0107 } 0108 0109 QVector<int> a,b,c,d,e; 0110 foreach (int i, a) 0111 foreach (int i2, b) 0112 c << 1; // OK 0113 0114 0115 0116 } 0117 0118 void test_misc() 0119 { 0120 QVector<int> v2; 0121 for (int i = 0; i < 10; ) { 0122 v2 << i; // OK 0123 } 0124 } 0125 0126 0127 class B 0128 { 0129 public: 0130 QVector<int> v; 0131 }; 0132 0133 0134 class A 0135 { 0136 A() 0137 { 0138 for (int i = 0; i < 10; ++i) 0139 v << i; // Warning 0140 0141 for (int i = 0; i < 10; ++i) 0142 b.v << i; // OK 0143 } 0144 0145 ~A() 0146 { 0147 for (int i = 0; i < 10; ++i) 0148 v << i; // Warning 0149 } 0150 0151 void foo() 0152 { 0153 for (int i = 0; i < 10; ++i) 0154 v << i; // OK 0155 } 0156 0157 public: 0158 QVector<int> v; 0159 B b; 0160 }; 0161 0162 struct Node 0163 { 0164 Node *next; 0165 int next2; 0166 }; 0167 0168 void testNode() 0169 { 0170 QVector<int> v, v2; 0171 Node *node; 0172 for (int i = 0; i < 10; node = node->next) // OK 0173 v << i; 0174 0175 for (int i = 0; i < 10; i = i + 1) v << i; // Warning 0176 0177 for (auto it = v2.cbegin(), e = v2.cend(); it != e; ++it) 0178 v << 0; // Warning 0179 0180 for (auto it = v2.cbegin(), e = v2.cend(); it != e; it = it + 1) 0181 v << 0; // Warning 0182 0183 for (int i = 0; i < 10; i = node->next2) 0184 v << i; // OK 0185 0186 0187 for (int i = 0; i < 10; ++i) { 0188 v << 1; // Warning 0189 v2 << 1; // Warning 0190 } 0191 0192 for (int i = 0; i < 10; i = node->next2) { 0193 v.push_back(1); // OK 0194 v.push_back(1); // OK 0195 v2.push_back(1); // OK 0196 v2.push_back(1); // OK 0197 } 0198 } 0199 0200 0201 struct testCTOR 0202 { 0203 testCTOR() 0204 { 0205 Node *node; 0206 for (int i = 0; i < 10; i = node->next2) { 0207 m_v << 1; // OK 0208 } 0209 } 0210 0211 QVector<int> m_v; 0212 }; 0213 0214 0215 void moreStuff() 0216 { 0217 QVector<int> v; 0218 for (int i = 0; ; ++i) 0219 v.push_back(1); 0220 0221 QHash<int,int> h; 0222 QHashIterator<int,int> it(h); 0223 while (it.hasNext()) { // Ok 0224 v.push_back(1); 0225 } 0226 } 0227 0228 0229 void rangeLoop() 0230 { 0231 QVector<int> v1, v2; 0232 for (auto i : v1) 0233 v2.push_back(i); 0234 } 0235 0236 struct Foo 0237 { 0238 Foo ip() const; 0239 QList<Foo> addressEntries; 0240 }; 0241 0242 void testNesting2() 0243 { 0244 QList<Foo> result; 0245 QList<Foo> privs; 0246 foreach (const Foo &p, privs) 0247 foreach (const Foo &entry, privs) 0248 result += entry.ip(); 0249 0250 QVector<int> v2; 0251 for (int u = 0; u < 10; ++u) { 0252 for (int n = 0; n < 10; ++n) { 0253 v2.append(1); 0254 } 0255 } 0256 } 0257 0258 0259 void bug362943() 0260 { 0261 QVector<int> vect; 0262 QQueue<int> q; 0263 q.reserve(10); 0264 for (const int i: vect) { 0265 q << i; 0266 } 0267 } 0268 0269 void bug367484() 0270 { 0271 QVarLengthArray<int> array; 0272 for (int i = 0; i < 10; ++i) { 0273 array.append(i); // OK 0274 } 0275 } 0276 0277 void test_std_vector() 0278 { 0279 std::vector<int> ints; 0280 for (int i = 0; i < 10; ++i) 0281 ints.push_back(i); 0282 }