forked from OSchip/llvm-project
92 lines
3.1 KiB
C++
92 lines
3.1 KiB
C++
|
// RUN: %check_clang_tidy %s fuchsia-statically-constructed-objects %t
|
||
|
|
||
|
// Trivial static is fine
|
||
|
static int i;
|
||
|
|
||
|
class ClassWithNoCtor {};
|
||
|
|
||
|
class ClassWithCtor {
|
||
|
public:
|
||
|
ClassWithCtor(int Val) : Val(Val) {}
|
||
|
private:
|
||
|
int Val;
|
||
|
};
|
||
|
|
||
|
class ClassWithConstexpr {
|
||
|
public:
|
||
|
ClassWithConstexpr(int Val1, int Val2) : Val(Val1) {}
|
||
|
constexpr ClassWithConstexpr(int Val) : Val(Val) {}
|
||
|
|
||
|
private:
|
||
|
int Val;
|
||
|
};
|
||
|
|
||
|
ClassWithNoCtor A;
|
||
|
ClassWithConstexpr C(0);
|
||
|
ClassWithConstexpr E(0, 1);
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: ClassWithConstexpr E(0, 1);
|
||
|
ClassWithCtor G(0);
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: ClassWithCtor G(0);
|
||
|
|
||
|
static ClassWithNoCtor A2;
|
||
|
static ClassWithConstexpr C2(0);
|
||
|
static ClassWithConstexpr E2(0, 1);
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: static ClassWithConstexpr E2(0, 1);
|
||
|
static ClassWithCtor G2(0);
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: static ClassWithCtor G2(0);
|
||
|
|
||
|
struct StructWithConstexpr { constexpr StructWithConstexpr(int Val) {} };
|
||
|
struct StructWithNoCtor {};
|
||
|
struct StructWithCtor { StructWithCtor(); };
|
||
|
|
||
|
StructWithNoCtor SNoCtor;
|
||
|
StructWithConstexpr SConstexpr(0);
|
||
|
StructWithCtor SCtor;
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: StructWithCtor SCtor;
|
||
|
|
||
|
static StructWithConstexpr SConstexpr2(0);
|
||
|
static StructWithNoCtor SNoCtor2;
|
||
|
static StructWithCtor SCtor2;
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: static StructWithCtor SCtor2;
|
||
|
|
||
|
extern StructWithCtor SCtor3;
|
||
|
|
||
|
class ClassWithStaticMember {
|
||
|
private:
|
||
|
static StructWithNoCtor S;
|
||
|
};
|
||
|
|
||
|
ClassWithStaticMember Z();
|
||
|
|
||
|
class S {
|
||
|
int Val;
|
||
|
public:
|
||
|
constexpr S(int i) : Val(100 / i) {}
|
||
|
int getVal() const { return Val; }
|
||
|
};
|
||
|
|
||
|
static S s1(1);
|
||
|
static S s2(0);
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: static S s2(0);
|
||
|
|
||
|
extern int get_i();
|
||
|
static S s3(get_i());
|
||
|
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: static objects are disallowed; if possible, use a constexpr constructor instead [fuchsia-statically-constructed-objects]
|
||
|
// CHECK-MESSAGES-NEXT: static S s3(get_i());
|
||
|
|
||
|
void f() {
|
||
|
// Locally static is fine
|
||
|
static int i;
|
||
|
static ClassWithNoCtor A2;
|
||
|
static ClassWithConstexpr C2(0);
|
||
|
static ClassWithConstexpr E2(0, 1);
|
||
|
static ClassWithCtor G2(0);
|
||
|
}
|