1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include <QtCore/QList>
#include <QtCore/QString>
#include <QtCore/QJsonArray>
#include <QtCore/QSequentialIterable>
struct Trivial
{
int a;
};
struct BigTrivial
{
int a, b, c, d, e;
void constFoo() const {}
void nonConstFoo() {}
};
struct SmallNonTrivial
{
int a;
~SmallNonTrivial() {}
};
extern void nop();
extern void nop2(BigTrivial &); // non-const-ref
extern void nop3(const BigTrivial &); // const-ref
extern void nop4(BigTrivial *); // pointer
void test_missing_ref()
{
const QList<Trivial> trivials;
const QList<BigTrivial> bigTrivials;
const QList<SmallNonTrivial> smallNonTrivials;
// Test #2: No warning
for (Trivial t : trivials) {
nop();
}
// Test #3: No warning
for (BigTrivial t : bigTrivials) {
nop();
}
// Test #4: Warning
for (SmallNonTrivial t : smallNonTrivials) {
nop();
}
// Test #5: No Warning
for (const BigTrivial t : bigTrivials) {
t.constFoo();
}
// Test #6: No warning
for (BigTrivial t : bigTrivials) {
t.nonConstFoo();
}
// Test #7: No warning
for (BigTrivial t : bigTrivials) {
t = BigTrivial();
}
// Test #8: No warning
for (BigTrivial t : bigTrivials) {
nop2(t);
}
// Test #9: No Warning
for (BigTrivial t : bigTrivials) {
nop3(t);
}
// Test #9: No warning
for (BigTrivial t : bigTrivials) {
nop4(&t);
}
// Test #10: No warning (bug #362587)
QSequentialIterable si = QVariant().value<QSequentialIterable>();
for (const auto &s : si) {}
}
void test_add_ref_fixits()
{
QStringList strlist;
for (const QString s : strlist) {} // should add &
for (QString s : strlist) {} // should add const-&
for (QString s : strlist) { // shouldn't warn
s = s.toLower();
}
for (QString s : strlist) { // shouldn't warn
s.clear();
}
}
void test_json_array()
{
QJsonArray array;
const QJsonArray const_array;
for (const auto a : array) {} // OK
for (const QJsonValue a : const_array) {} // Warn
for (const QJsonValue &a : const_array) {} // OK
}
|