Warning, /sdk/clazy/tests/function-args-by-value/main.cpp.fixed.expected is written in an unsupported language. File is not indexed.
0001 #include <QtCore/QDebug>
0002 #include <QtGui/QColor>
0003 #include <atomic>
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 void by_pointer(NonTrivial*) {}
0019 void by_const_pointer(const NonTrivial*) {}
0020 void by_ref(NonTrivial&) {}
0021 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(NonTrivial nt) // Test #3: Warning
0035 {
0036 return nt.a;
0037 }
0038
0039 int foo4(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(NonTrivial nt) // Test #8: Warning
0064 {
0065 nt.constFunction();
0066 return nt.a;
0067 }
0068
0069 int foo9(NonTrivial nt) // Test #9: Warning
0070 {
0071 by_constRef(nt);
0072 return nt.a;
0073 }
0074
0075 int foo10(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(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(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(DefaultButNotTrivialCopyable)
0146 {
0147
0148 }
0149
0150 void shouldBeByValue(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(Trivial t);
0166 void foo4(Trivial t)
0167 {
0168 }
0169
0170 void foo5(Trivial t)
0171 {
0172 }
0173
0174 void foo6(Trivial t = {})
0175 {
0176 }
0177
0178
0179 struct Base // Test that fixits fix both Base and Derived
0180 {
0181 void foo(Trivial );
0182 };
0183
0184 void Base::foo(Trivial )
0185 {
0186 }
0187
0188 struct Derived : public Base
0189 {
0190 void foo(Trivial );
0191 };
0192
0193 void Derived::foo(Trivial )
0194 {
0195 }
0196
0197 struct QDBusMessage
0198 {
0199 void createErrorReply(QString) {}
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 (NonTrivial) {}
0215 };
0216
0217 void trivialByConstRef(int t) {} // Warn
0218 void trivialByRef(int &t) {} // OK
0219
0220 // #381812
0221
0222 class BaseWithVirtuals
0223 {
0224 public:
0225 virtual void virtualMethod1(const Trivial &) {}; // Warn
0226 virtual void virtualMethod2(const Trivial &) {}; // Warn
0227 void nonVirtualMethod(Trivial ) {}; // Warn
0228 };
0229
0230 class DerivedWithVirtuals : BaseWithVirtuals {
0231 public:
0232 void virtualMethod1(const Trivial &) override {}; // OK
0233 void virtualMethod2(const Trivial &) {}; // OK
0234 void nonVirtualMethod(Trivial ) {}; // Warn
0235 };
0236
0237
0238 // bug #403088
0239 void func(const std::atomic<int> &a) {} // Ok, since it's not trivially-copyable
0240
0241 // generalization of bug #403088
0242 struct DeletedCopyCtor {
0243 DeletedCopyCtor(const DeletedCopyCtor &) = delete;
0244 int v;
0245 };
0246
0247 void func(const DeletedCopyCtor &a) {}