forked from OSchip/llvm-project
402 lines
14 KiB
C++
402 lines
14 KiB
C++
// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- -- -std=c++11
|
|
|
|
struct S {
|
|
};
|
|
|
|
struct PositiveValueChar {
|
|
PositiveValueChar() : c0(), c1()/*, c2(), c3()*/ {}
|
|
// CHECK-FIXES: PositiveValueChar() {}
|
|
const char c0;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: use default member initializer for 'c0' [modernize-use-default-member-init]
|
|
// CHECK-FIXES: const char c0{};
|
|
wchar_t c1;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use default member initializer for 'c1'
|
|
// CHECK-FIXES: wchar_t c1{};
|
|
// FIXME: char16_t c2;
|
|
// C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c2'
|
|
// C HECK-FIXES: char16_t c2{};
|
|
// FIXME: char32_t c3;
|
|
// C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c3'
|
|
// C HECK-FIXES: char32_t c3{};
|
|
};
|
|
|
|
struct PositiveChar {
|
|
PositiveChar() : d('a') {}
|
|
// CHECK-FIXES: PositiveChar() {}
|
|
char d;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'd'
|
|
// CHECK-FIXES: char d{'a'};
|
|
};
|
|
|
|
struct PositiveValueInt {
|
|
PositiveValueInt() : i() {}
|
|
// CHECK-FIXES: PositiveValueInt() {}
|
|
const int i;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use default member initializer for 'i'
|
|
// CHECK-FIXES: const int i{};
|
|
};
|
|
|
|
struct PositiveInt {
|
|
PositiveInt() : j(1) {}
|
|
// CHECK-FIXES: PositiveInt() {}
|
|
int j;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'
|
|
// CHECK-FIXES: int j{1};
|
|
};
|
|
|
|
struct PositiveUnaryMinusInt {
|
|
PositiveUnaryMinusInt() : j(-1) {}
|
|
// CHECK-FIXES: PositiveUnaryMinusInt() {}
|
|
int j;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'
|
|
// CHECK-FIXES: int j{-1};
|
|
};
|
|
|
|
struct PositiveUnaryPlusInt {
|
|
PositiveUnaryPlusInt() : j(+1) {}
|
|
// CHECK-FIXES: PositiveUnaryPlusInt() {}
|
|
int j;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'
|
|
// CHECK-FIXES: int j{+1};
|
|
};
|
|
|
|
struct PositiveValueComplexInt {
|
|
PositiveValueComplexInt() : i() {}
|
|
// CHECK-FIXES: PositiveValueComplexInt() {}
|
|
_Complex int i;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: use default member initializer for 'i'
|
|
// CHECK-FIXES: _Complex int i{};
|
|
};
|
|
|
|
struct PositiveValueFloat {
|
|
PositiveValueFloat() : f() {}
|
|
// CHECK-FIXES: PositiveValueFloat() {}
|
|
float f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: float f{};
|
|
};
|
|
|
|
struct PositiveValueDouble {
|
|
PositiveValueDouble() : d() {}
|
|
// CHECK-FIXES: PositiveValueDouble() {}
|
|
double d;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'd'
|
|
// CHECK-FIXES: double d{};
|
|
};
|
|
|
|
struct PositiveDouble {
|
|
PositiveDouble() : f(2.5463e43) {}
|
|
// CHECK-FIXES: PositiveDouble() {}
|
|
double f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: double f{2.5463e43};
|
|
};
|
|
|
|
struct PositiveValueComplexFloat {
|
|
PositiveValueComplexFloat() : f() {}
|
|
// CHECK-FIXES: PositiveValueComplexFloat() {}
|
|
_Complex float f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: _Complex float f{};
|
|
};
|
|
|
|
struct PositiveValueComplexDouble {
|
|
PositiveValueComplexDouble() : f() {}
|
|
// CHECK-FIXES: PositiveValueComplexDouble() {}
|
|
_Complex double f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: _Complex double f{};
|
|
};
|
|
|
|
struct PositiveUnaryMinusDouble {
|
|
PositiveUnaryMinusDouble() : f(-2.5463e43) {}
|
|
// CHECK-FIXES: PositiveUnaryMinusDouble() {}
|
|
double f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: double f{-2.5463e43};
|
|
};
|
|
|
|
struct PositiveUnaryPlusDouble {
|
|
PositiveUnaryPlusDouble() : f(+2.5463e43) {}
|
|
// CHECK-FIXES: PositiveUnaryPlusDouble() {}
|
|
double f;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'
|
|
// CHECK-FIXES: double f{+2.5463e43};
|
|
};
|
|
|
|
struct PositiveValueBool {
|
|
PositiveValueBool() : b() {}
|
|
// CHECK-FIXES: PositiveValueBool() {}
|
|
bool b;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'b'
|
|
// CHECK-FIXES: bool b{};
|
|
};
|
|
|
|
struct PositiveBool {
|
|
PositiveBool() : a(true) {}
|
|
// CHECK-FIXES: PositiveBool() {}
|
|
bool a;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'a'
|
|
// CHECK-FIXES: bool a{true};
|
|
};
|
|
|
|
struct PositiveValuePointer {
|
|
PositiveValuePointer() : p() {}
|
|
// CHECK-FIXES: PositiveValuePointer() {}
|
|
int *p;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'p'
|
|
// CHECK-FIXES: int *p{};
|
|
};
|
|
|
|
struct PositiveNullPointer {
|
|
PositiveNullPointer() : q(nullptr) {}
|
|
// CHECK-FIXES: PositiveNullPointer() {}
|
|
int *q;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'q'
|
|
// CHECK-FIXES: int *q{nullptr};
|
|
};
|
|
|
|
enum Enum { Foo, Bar };
|
|
struct PositiveEnum {
|
|
PositiveEnum() : e(Foo) {}
|
|
// CHECK-FIXES: PositiveEnum() {}
|
|
Enum e;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e'
|
|
// CHECK-FIXES: Enum e{Foo};
|
|
};
|
|
|
|
struct PositiveString {
|
|
PositiveString() : s("foo") {}
|
|
// CHECK-FIXES: PositiveString() {}
|
|
const char *s;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: use default member initializer for 's'
|
|
// CHECK-FIXES: const char *s{"foo"};
|
|
};
|
|
|
|
struct PositiveStruct {
|
|
PositiveStruct() : s(7) {}
|
|
// CHECK-FIXES: PositiveStruct() {}
|
|
struct {
|
|
int s;
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 's'
|
|
// CHECK-FIXES: int s{7};
|
|
};
|
|
};
|
|
|
|
template <typename T>
|
|
struct NegativeTemplate {
|
|
NegativeTemplate() : t() {}
|
|
T t;
|
|
};
|
|
|
|
NegativeTemplate<int> nti;
|
|
NegativeTemplate<double> ntd;
|
|
|
|
struct NegativeDefaultMember {
|
|
NegativeDefaultMember() {}
|
|
int i = 2;
|
|
};
|
|
|
|
struct NegativeClass : S {
|
|
NegativeClass() : s() {}
|
|
S s;
|
|
};
|
|
|
|
struct NegativeBase : S {
|
|
NegativeBase() : S() {}
|
|
};
|
|
|
|
struct NegativeDefaultOtherMember{
|
|
NegativeDefaultOtherMember() : i(3) {}
|
|
int i = 4;
|
|
};
|
|
|
|
struct NegativeUnion {
|
|
NegativeUnion() : d(5.0) {}
|
|
union {
|
|
int i;
|
|
double d;
|
|
};
|
|
};
|
|
|
|
struct NegativeBitField
|
|
{
|
|
NegativeBitField() : i(6) {}
|
|
int i : 5;
|
|
};
|
|
|
|
struct NegativeNotDefaultInt
|
|
{
|
|
NegativeNotDefaultInt(int) : i(7) {}
|
|
int i;
|
|
};
|
|
|
|
struct NegativeDefaultArg
|
|
{
|
|
NegativeDefaultArg(int i = 4) : i(i) {}
|
|
int i;
|
|
};
|
|
|
|
struct ExistingChar {
|
|
ExistingChar(short) : e1(), e2(), e3(), e4() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingChar(short) : e4() {}
|
|
ExistingChar(int) : e1(0), e2(0), e3(0), e4(0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingChar(int) : e4(0) {}
|
|
ExistingChar(long) : e1('\0'), e2('\0'), e3('\0'), e4('\0') {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:44: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingChar(long) : e4('\0') {}
|
|
ExistingChar(char) : e1('a'), e2('a'), e3('a'), e4('a') {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:51: warning: member initializer for 'e4' is redundant
|
|
// CHECK-FIXES: ExistingChar(char) : e1('a'), e2('a'), e3('a') {}
|
|
char e1{};
|
|
char e2 = 0;
|
|
char e3 = '\0';
|
|
char e4 = 'a';
|
|
};
|
|
|
|
struct ExistingInt {
|
|
ExistingInt(short) : e1(), e2(), e3(), e4(), e5(), e6() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingInt(short) : e3(), e4(), e5(), e6() {}
|
|
ExistingInt(int) : e1(0), e2(0), e3(0), e4(0), e5(0), e6(0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:29: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingInt(int) : e3(0), e4(0), e5(0), e6(0) {}
|
|
ExistingInt(long) : e1(5), e2(5), e3(5), e4(5), e5(5), e6(5) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: member initializer for 'e3' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:44: warning: member initializer for 'e4' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:58: warning: member initializer for 'e6' is redundant
|
|
// CHECK-FIXES: ExistingInt(long) : e1(5), e2(5), e5(5) {}
|
|
ExistingInt(char) : e1(-5), e2(-5), e3(-5), e4(-5), e5(-5), e6(-5) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:55: warning: member initializer for 'e5' is redundant
|
|
// CHECK-FIXES: ExistingInt(char) : e1(-5), e2(-5), e3(-5), e4(-5), e6(-5) {}
|
|
int e1{};
|
|
int e2 = 0;
|
|
int e3 = {5};
|
|
int e4 = 5;
|
|
int e5 = -5;
|
|
int e6 = +5;
|
|
};
|
|
|
|
struct ExistingDouble {
|
|
ExistingDouble(short) : e1(), e2(), e3(), e4(), e5() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingDouble(short) : e3(), e4(), e5() {}
|
|
ExistingDouble(int) : e1(0.0), e2(0.0), e3(0.0), e4(0.0), e5(0.0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingDouble(int) : e3(0.0), e4(0.0), e5(0.0) {}
|
|
ExistingDouble(long) : e1(5.0), e2(5.0), e3(5.0), e4(5.0), e5(5.0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:62: warning: member initializer for 'e5' is redundant
|
|
// CHECK-FIXES: ExistingDouble(long) : e1(5.0), e2(5.0), e4(5.0) {}
|
|
ExistingDouble(char) : e1(-5.0), e2(-5.0), e3(-5.0), e4(-5.0), e5(-5.0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:56: warning: member initializer for 'e4' is redundant
|
|
// CHECK-FIXES: ExistingDouble(char) : e1(-5.0), e2(-5.0), e3(-5.0), e5(-5.0) {}
|
|
double e1{};
|
|
double e2 = 0.0;
|
|
double e3 = 5.0;
|
|
double e4 = -5.0;
|
|
double e5 = +5.0;
|
|
};
|
|
|
|
struct ExistingBool {
|
|
ExistingBool(short) : e1(), e2(), e3() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingBool(short) : e3() {}
|
|
ExistingBool(int) : e1(false), e2(false), e3(false) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingBool(int) : e3(false) {}
|
|
ExistingBool(long) : e1(true), e2(true), e3(true) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingBool(long) : e1(true), e2(true) {}
|
|
bool e1{};
|
|
bool e2 = false;
|
|
bool e3 = true;
|
|
};
|
|
|
|
struct ExistingEnum {
|
|
ExistingEnum(short) : e1(Foo), e2(Foo) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant
|
|
// CHECK-FIXES: ExistingEnum(short) : e2(Foo) {}
|
|
ExistingEnum(int) : e1(Bar), e2(Bar) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:32: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingEnum(int) : e1(Bar) {}
|
|
Enum e1 = Foo;
|
|
Enum e2{Bar};
|
|
};
|
|
|
|
struct ExistingPointer {
|
|
ExistingPointer(short) : e1(), e2(), e3(), e4() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingPointer(short) : e4() {}
|
|
ExistingPointer(int) : e1(0), e2(0), e3(0), e4(&e1) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingPointer(int) : e4(&e1) {}
|
|
ExistingPointer(long) : e1(nullptr), e2(nullptr), e3(nullptr), e4(&e2) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:40: warning: member initializer for 'e2' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-3]]:53: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingPointer(long) : e4(&e2) {}
|
|
int *e1{};
|
|
int *e2 = 0;
|
|
int *e3 = nullptr;
|
|
int **e4 = &e1;
|
|
};
|
|
|
|
struct ExistingString {
|
|
ExistingString(short) : e1(), e2(), e3(), e4() {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingString(short) : e3(), e4() {}
|
|
ExistingString(int) : e1(0), e2(0), e3(0), e4(0) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:32: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingString(int) : e3(0), e4(0) {}
|
|
ExistingString(long) : e1(nullptr), e2(nullptr), e3(nullptr), e4(nullptr) {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:39: warning: member initializer for 'e2' is redundant
|
|
// CHECK-FIXES: ExistingString(long) : e3(nullptr), e4(nullptr) {}
|
|
ExistingString(char) : e1("foo"), e2("foo"), e3("foo"), e4("foo") {}
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:48: warning: member initializer for 'e3' is redundant
|
|
// CHECK-FIXES: ExistingString(char) : e1("foo"), e2("foo"), e4("foo") {}
|
|
const char *e1{};
|
|
const char *e2 = nullptr;
|
|
const char *e3 = "foo";
|
|
const char *e4 = "bar";
|
|
};
|
|
|
|
template <typename T>
|
|
struct NegativeTemplateExisting {
|
|
NegativeTemplateExisting(int) : t(0) {}
|
|
T t{};
|
|
};
|
|
|
|
NegativeTemplateExisting<int> ntei(0);
|
|
NegativeTemplateExisting<double> nted(0);
|
|
|
|
// This resulted in a warning by default.
|
|
#define MACRO() \
|
|
struct MacroS { \
|
|
void *P; \
|
|
MacroS() : P(nullptr) {} \
|
|
};
|
|
|
|
MACRO();
|