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 }