blob: dc6fe412fca575e4dcd556a5cf6ff3a54f57918b (
plain)
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
}
|