Warning, /sdk/clazy/tests/function-args-by-ref/main.cpp.fixed.expected is written in an unsupported language. File is not indexed.
0001 #include <QtCore/QDebug>
0002 #include <QtGui/QColor>
0003
0004
0005
0006 struct Trivial {
0007 int a;
0008 };
0009
0010 struct NonTrivial {
0011 NonTrivial() {}
0012 NonTrivial(const NonTrivial &) {}
0013 void constFunction() const {};
0014 void nonConstFunction() {};
0015 int a;
0016 };
0017
0018 extern void by_pointer(NonTrivial*);
0019 extern void by_const_pointer(const NonTrivial*);
0020 extern void by_ref(NonTrivial&);
0021 extern void by_constRef(const NonTrivial&);
0022
0023 int foo1(const Trivial nt) // Test #1: No warning
0024 {
0025 return nt.a;
0026 }
0027
0028 int foo2(const NonTrivial &nt) // Test #2: Warning
0029 {
0030 nt.constFunction();
0031 return nt.a;
0032 }
0033
0034 int foo3(const NonTrivial &nt) // Test #3: Warning
0035 {
0036 return nt.a;
0037 }
0038
0039 int foo4(const NonTrivial &nt) // Test #4: Warning
0040 {
0041 return nt.a;
0042 }
0043
0044 int foo5(NonTrivial nt) // Test #5: No warning
0045 {
0046 by_pointer(&nt);
0047 return nt.a;
0048 }
0049
0050
0051 int foo6(NonTrivial nt) // Test #6: No warning
0052 {
0053 by_ref(nt);
0054 return nt.a;
0055 }
0056
0057 int foo7(NonTrivial nt) // Test #7: No warning
0058 {
0059 nt.nonConstFunction();
0060 return nt.a;
0061 }
0062
0063 int foo8(const NonTrivial &nt) // Test #8: Warning
0064 {
0065 nt.constFunction();
0066 return nt.a;
0067 }
0068
0069 int foo9(const NonTrivial &nt) // Test #9: Warning
0070 {
0071 by_constRef(nt);
0072 return nt.a;
0073 }
0074
0075 int foo10(const NonTrivial &nt) // Test #10: Warning
0076 {
0077 by_const_pointer(&nt);
0078 return nt.a;
0079 }
0080
0081 int foo11(QColor) // Test #11: No warning
0082 {
0083 return 1;
0084 }
0085
0086 int foo12(NonTrivial nt) // Test #12: No warning
0087 {
0088 nt = NonTrivial();
0089 return 1;
0090 }
0091
0092 void func(QString text)
0093 {
0094 QTextStream a(&text); // OK, by-pointer to a CTOR
0095 }
0096
0097 struct StringConstPtr
0098 {
0099 StringConstPtr(const QString *s) {}
0100 };
0101
0102 void func2(const QString &text)
0103 {
0104 StringConstPtr s(&text); // Warning, it's a const ptr
0105 }
0106
0107 enum Option {
0108 FooOption,
0109 FooOption2
0110 };
0111
0112
0113 Q_DECLARE_FLAGS(Options, Option)
0114 Q_DECLARE_OPERATORS_FOR_FLAGS(Options)
0115
0116 struct NoUserCtorsButNotTrivial
0117 {
0118 NonTrivial t;
0119 };
0120
0121 void testNoUserCtorsButNotTrivial(const NoUserCtorsButNotTrivial&)
0122 {
0123
0124 }
0125
0126 struct TrivialWithDefaultCopyCtorAndDtor
0127 {
0128 TrivialWithDefaultCopyCtorAndDtor(const TrivialWithDefaultCopyCtorAndDtor &) = default;
0129 ~TrivialWithDefaultCopyCtorAndDtor() = default;
0130 int m;
0131 };
0132
0133 void testTrivialWithDefaultCopyCtorAndDtor(TrivialWithDefaultCopyCtorAndDtor)
0134 {
0135
0136 }
0137
0138 struct DefaultButNotTrivialCopyable
0139 {
0140 DefaultButNotTrivialCopyable(const DefaultButNotTrivialCopyable & ) = default;
0141 ~DefaultButNotTrivialCopyable() = default;
0142 NonTrivial t;
0143 };
0144
0145 void testDefaultButNotTrivialCopyable(const DefaultButNotTrivialCopyable&)
0146 {
0147
0148 }
0149
0150 void shouldBeByValue(const Trivial &nt)
0151 {
0152
0153 }
0154
0155
0156 void isOK(const NonTrivial &&)
0157 {
0158 }
0159
0160 void foo(const Trivial &t = Trivial());
0161 void foo1(const Trivial & = Trivial());
0162 void foo2(const Trivial &t);
0163 void foo3(const Trivial&);
0164
0165 void foo4(const Trivial &t);
0166 void foo4(const Trivial &t)
0167 {
0168 }
0169
0170 void foo5(const Trivial &t)
0171 {
0172 }
0173
0174 void foo6(const Trivial &t = {})
0175 {
0176 }
0177
0178
0179 struct Base // Test that fixits fix both Base and Derived
0180 {
0181 void foo(const Trivial &);
0182 };
0183
0184 void Base::foo(const Trivial &)
0185 {
0186 }
0187
0188 struct Derived : public Base
0189 {
0190 void foo(const Trivial &);
0191 };
0192
0193 void Derived::foo(const Trivial &)
0194 {
0195 }
0196
0197
0198
0199
0200
0201
0202 struct DeletedCtor // bug #360112
0203 {
0204 Q_DISABLE_COPY(DeletedCtor)
0205 };
0206
0207 struct CopyCtor // bug #360112
0208 {
0209 CopyCtor(const CopyCtor &) {}
0210 };
0211
0212 struct Ctors
0213 {
0214 Ctors (const NonTrivial&) {}
0215 };
0216
0217
0218 struct Ctors2
0219 {
0220 Ctors2(NonTrivial n) : m(std::move(n)), i(0) {} // Ok
0221 NonTrivial m;
0222 int i;
0223 };
0224
0225 struct Ctors3
0226 {
0227 Ctors3(const NonTrivial &n) : m(n), i(0) {} // Warning
0228 NonTrivial m;
0229 int i;
0230 };
0231
0232
0233 // #381812
0234 class BaseWithVirtuals
0235 {
0236 public:
0237 virtual void virtualMethod1(const NonTrivial&) {}; // Warn
0238 virtual void virtualMethod2(const NonTrivial&) {}; // Warn
0239 void nonVirtualMethod(const NonTrivial&) {}; // Warn
0240 };
0241
0242 class DerivedWithVirtuals : BaseWithVirtuals {
0243 public:
0244 void virtualMethod1(const NonTrivial&) override {}; // OK
0245 void virtualMethod2(const NonTrivial&) {}; // OK
0246 void nonVirtualMethod(const NonTrivial&) {}; // Warn
0247 };