brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.1 KiB · 3273501 Raw
622 lines · cpp
1// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s modernize-use-default-member-init %t -- -- -fexceptions2// FIXME: Fix the checker to work in C++20 mode.3 4struct S {5};6 7struct PositiveValueChar {8  PositiveValueChar() : c0(), c1()/*, c2(), c3()*/ {}9  // CHECK-FIXES: PositiveValueChar()  {}10  const char c0;11  // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: use default member initializer for 'c0' [modernize-use-default-member-init]12  // CHECK-FIXES: const char c0{};13  wchar_t c1;14  // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use default member initializer for 'c1'15  // CHECK-FIXES: wchar_t c1{};16  // FIXME: char16_t c2;17  // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c2'18  // C HECK-FIXES: char16_t c2{};19  // FIXME: char32_t c3;20  // C HECK-MESSAGES: :[[@LINE-1]]:12: warning: use default member initializer for 'c3'21  // C HECK-FIXES: char32_t c3{};22};23 24struct PositiveChar {25  PositiveChar() : d('a') {}26  // CHECK-FIXES: PositiveChar()  {}27  char d;28  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'd'29  // CHECK-FIXES: char d{'a'};30};31 32struct PositiveValueInt {33  PositiveValueInt() : i() {}34  // CHECK-FIXES: PositiveValueInt()  {}35  const int i;36  // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: use default member initializer for 'i'37  // CHECK-FIXES: const int i{};38};39 40struct PositiveInt {41  PositiveInt() : j(1) {}42  // CHECK-FIXES: PositiveInt()  {}43  int j;44  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'45  // CHECK-FIXES: int j{1};46};47 48struct PositiveNotDefaultInt {49  PositiveNotDefaultInt(int) : i(7) {}50  // CHECK-FIXES: PositiveNotDefaultInt(int)  {}51  int i;52  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'i'53  // CHECK-FIXES: int i{7};54};55 56// We cannot reconcile these initializers.57struct TwoConstructors {58    TwoConstructors(int) : i(7) {}59    TwoConstructors(int, int) : i(8) {}60    int i;61};62 63struct TwoConstructorsTpl {64  TwoConstructorsTpl() : i{7} {}65  template <typename T> TwoConstructorsTpl(T, int) : i(8) {}66  int i;67};68 69struct PositiveNotDefaultOOLInt {70  PositiveNotDefaultOOLInt(int);71  int i;72  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'i'73  // CHECK-FIXES: int i{7};74};75 76PositiveNotDefaultOOLInt::PositiveNotDefaultOOLInt(int) : i(7) {}77// CHECK-FIXES: PositiveNotDefaultOOLInt::PositiveNotDefaultOOLInt(int)  {}78 79struct PositiveNotDefaultOOLInt2 {80  PositiveNotDefaultOOLInt2(int, int);81  int i;82  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'i'83  // CHECK-FIXES: int i{7};84  int j;85};86 87PositiveNotDefaultOOLInt2::PositiveNotDefaultOOLInt2(int, int arg) : i(7), j(arg) {}88// CHECK-FIXES: PositiveNotDefaultOOLInt2::PositiveNotDefaultOOLInt2(int, int arg) :  j(arg) {}89 90struct PositiveUnaryMinusInt {91  PositiveUnaryMinusInt() : j(-1) {}92  // CHECK-FIXES: PositiveUnaryMinusInt()  {}93  int j;94  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'95  // CHECK-FIXES: int j{-1};96};97 98struct PositiveUnaryPlusInt {99  PositiveUnaryPlusInt() : j(+1) {}100  // CHECK-FIXES: PositiveUnaryPlusInt()  {}101  int j;102  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'j'103  // CHECK-FIXES: int j{+1};104};105 106struct PositiveValueComplexInt {107  PositiveValueComplexInt() : i() {}108  // CHECK-FIXES: PositiveValueComplexInt()  {}109  _Complex int i;110  // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: use default member initializer for 'i'111  // CHECK-FIXES: _Complex int i{};112};113 114struct PositiveValueFloat {115  PositiveValueFloat() : f() {}116  // CHECK-FIXES: PositiveValueFloat()  {}117  float f;118  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'f'119  // CHECK-FIXES: float f{};120};121 122struct PositiveValueDouble {123  PositiveValueDouble() : d() {}124  // CHECK-FIXES: PositiveValueDouble()  {}125  double d;126  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'd'127  // CHECK-FIXES: double d{};128};129 130struct PositiveDouble {131  PositiveDouble() : f(2.5463e43) {}132  // CHECK-FIXES: PositiveDouble()  {}133  double f;134  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'135  // CHECK-FIXES: double f{2.5463e43};136};137 138struct PositiveValueComplexFloat {139  PositiveValueComplexFloat() : f() {}140  // CHECK-FIXES: PositiveValueComplexFloat()  {}141  _Complex float f;142  // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use default member initializer for 'f'143  // CHECK-FIXES: _Complex float f{};144};145 146struct PositiveValueComplexDouble {147  PositiveValueComplexDouble() : f() {}148  // CHECK-FIXES: PositiveValueComplexDouble()  {}149  _Complex double f;150  // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: use default member initializer for 'f'151  // CHECK-FIXES: _Complex double f{};152};153 154struct PositiveUnaryMinusDouble {155  PositiveUnaryMinusDouble() : f(-2.5463e43) {}156  // CHECK-FIXES: PositiveUnaryMinusDouble()  {}157  double f;158  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'159  // CHECK-FIXES: double f{-2.5463e43};160};161 162struct PositiveUnaryPlusDouble {163  PositiveUnaryPlusDouble() : f(+2.5463e43) {}164  // CHECK-FIXES: PositiveUnaryPlusDouble()  {}165  double f;166  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'f'167  // CHECK-FIXES: double f{+2.5463e43};168};169 170struct PositiveValueBool {171  PositiveValueBool() : b() {}172  // CHECK-FIXES: PositiveValueBool()  {}173  bool b;174  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'b'175  // CHECK-FIXES: bool b{};176};177 178struct PositiveBool {179  PositiveBool() : a(true) {}180  // CHECK-FIXES: PositiveBool()  {}181  bool a;182  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'a'183  // CHECK-FIXES: bool a{true};184};185 186struct PositiveValuePointer {187  PositiveValuePointer() : p() {}188  // CHECK-FIXES: PositiveValuePointer()  {}189  int *p;190  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'p'191  // CHECK-FIXES: int *p{};192};193 194struct PositiveNullPointer {195  PositiveNullPointer() : q(nullptr) {}196  // CHECK-FIXES: PositiveNullPointer()  {}197  int *q;198  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'q'199  // CHECK-FIXES: int *q{nullptr};200};201 202enum Enum { Foo, Bar };203struct PositiveEnum {204  PositiveEnum() : e(Foo) {}205  // CHECK-FIXES: PositiveEnum()  {}206  Enum e;207  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e'208  // CHECK-FIXES: Enum e{Foo};209};210 211struct PositiveValueEnum {212  PositiveValueEnum() : e() {}213  // CHECK-FIXES: PositiveValueEnum()  {}214  Enum e;215  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use default member initializer for 'e'216  // CHECK-FIXES: Enum e{};217};218 219struct PositiveString {220  PositiveString() : s("foo") {}221  // CHECK-FIXES: PositiveString()  {}222  const char *s;223  // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: use default member initializer for 's'224  // CHECK-FIXES: const char *s{"foo"};225};226 227struct PositiveStruct {228  PositiveStruct() : s(7) {}229  // CHECK-FIXES: PositiveStruct()  {}230  struct {231    int s;232    // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 's'233    // CHECK-FIXES: int s{7};234  };235};236 237template <typename T>238struct NegativeTemplate {239    NegativeTemplate() : t() {}240    T t;241};242 243NegativeTemplate<int> nti;244NegativeTemplate<double> ntd;245 246struct NegativeDefaultMember {247  NegativeDefaultMember() {}248  int i = 2;249};250 251struct NegativeClass : S {252  NegativeClass() : s() {}253  S s;254};255 256struct NegativeBase : S {257  NegativeBase() : S() {}258};259 260struct NegativeDefaultOtherMember{261  NegativeDefaultOtherMember() : i(3) {}262  int i = 4;263};264 265struct NegativeUnion {266  NegativeUnion() : d(5.0) {}267  union {268    int i;269    double d;270  };271};272 273struct NegativeBitField274{275  NegativeBitField() : i(6) {}276  int i : 5;277};278 279struct NegativeDefaultArg280{281  NegativeDefaultArg(int i = 4) : i(i) {}282  int i;283};284 285struct ExistingChar {286  ExistingChar(short) : e1(), e2{}, e3(), e4() {}287  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]288  // CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant289  // CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant290  // CHECK-FIXES: ExistingChar(short) :  e4() {}291  ExistingChar(int) : e1(0), e2{0}, e3(0), e4(0) {}292  // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant293  // CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant294  // CHECK-MESSAGES: :[[@LINE-3]]:37: warning: member initializer for 'e3' is redundant295  // CHECK-FIXES: ExistingChar(int) :  e4(0) {}296  ExistingChar(long) : e1('\0'), e2{'\0'}, e3('\0'), e4('\0') {}297  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant298  // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant299  // CHECK-MESSAGES: :[[@LINE-3]]:44: warning: member initializer for 'e3' is redundant300  // CHECK-FIXES: ExistingChar(long) :  e4('\0') {}301  ExistingChar(char) : e1('a'), e2{'a'}, e3('a'), e4('a') {}302  // CHECK-MESSAGES: :[[@LINE-1]]:51: warning: member initializer for 'e4' is redundant303  // CHECK-FIXES: ExistingChar(char) : e1('a'), e2{'a'}, e3('a') {}304  char e1{};305  char e2 = 0;306  char e3 = '\0';307  char e4 = 'a';308};309 310struct ExistingInt {311  ExistingInt(short) : e1(), e2{}, e3(), e4(), e5(), e6() {}312  // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]313  // CHECK-MESSAGES: :[[@LINE-2]]:30: warning: member initializer for 'e2' is redundant314  // CHECK-FIXES: ExistingInt(short) :  e3(), e4(), e5(), e6() {}315  ExistingInt(int) : e1(0), e2{0}, e3(0), e4(0), e5(0), e6(0) {}316  // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: member initializer for 'e1' is redundant317  // CHECK-MESSAGES: :[[@LINE-2]]:29: warning: member initializer for 'e2' is redundant318  // CHECK-FIXES: ExistingInt(int) :  e3(0), e4(0), e5(0), e6(0) {}319  ExistingInt(long) : e1(5), e2{5}, e3(5), e4(5), e5(5), e6(5) {}320  // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: member initializer for 'e3' is redundant321  // CHECK-MESSAGES: :[[@LINE-2]]:44: warning: member initializer for 'e4' is redundant322  // CHECK-MESSAGES: :[[@LINE-3]]:58: warning: member initializer for 'e6' is redundant323  // CHECK-FIXES: ExistingInt(long) : e1(5), e2{5},  e5(5) {}324  ExistingInt(char) : e1(-5), e2{-5}, e3(-5), e4(-5), e5(-5), e6(-5) {}325  // CHECK-MESSAGES: :[[@LINE-1]]:55: warning: member initializer for 'e5' is redundant326  // CHECK-FIXES: ExistingInt(char) : e1(-5), e2{-5}, e3(-5), e4(-5),  e6(-5) {}327  int e1{};328  int e2 = 0;329  int e3 = {5};330  int e4{5};331  int e5 = -5;332  int e6 = +5;333};334 335struct ExistingDouble {336  ExistingDouble(short) : e1(), e2{}, e3(), e4(), e5() {}337  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant338  // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant339  // CHECK-FIXES: ExistingDouble(short) :  e3(), e4(), e5() {}340  ExistingDouble(int) : e1(0.0), e2{0.0}, e3(0.0), e4(0.0), e5(0.0) {}341  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant342  // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant343  // CHECK-FIXES: ExistingDouble(int) :  e3(0.0), e4(0.0), e5(0.0) {}344  ExistingDouble(long) : e1(5.0), e2{5.0}, e3(5.0), e4(5.0), e5(5.0) {}345  // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant346  // CHECK-MESSAGES: :[[@LINE-2]]:62: warning: member initializer for 'e5' is redundant347  // CHECK-FIXES: ExistingDouble(long) : e1(5.0), e2{5.0},  e4(5.0) {}348  ExistingDouble(char) : e1(-5.0), e2{-5.0}, e3(-5.0), e4(-5.0), e5(-5.0) {}349  // CHECK-MESSAGES: :[[@LINE-1]]:56: warning: member initializer for 'e4' is redundant350  // CHECK-FIXES: ExistingDouble(char) : e1(-5.0), e2{-5.0}, e3(-5.0),  e5(-5.0) {}351  double e1{};352  double e2 = 0.0;353  double e3 = 5.0;354  double e4{-5.0};355  double e5 = +5.0;356};357 358struct ExistingBool {359  ExistingBool(short) : e1(), e2{}, e3() {}360  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant361  // CHECK-MESSAGES: :[[@LINE-2]]:31: warning: member initializer for 'e2' is redundant362  // CHECK-FIXES: ExistingBool(short) :  e3() {}363  ExistingBool(int) : e1(false), e2{false}, e3(false) {}364  // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: member initializer for 'e1' is redundant365  // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant366  // CHECK-FIXES: ExistingBool(int) :  e3(false) {}367  ExistingBool(long) : e1(true), e2{true}, e3(true) {}368  // CHECK-MESSAGES: :[[@LINE-1]]:44: warning: member initializer for 'e3' is redundant369  // CHECK-FIXES: ExistingBool(long) : e1(true), e2{true} {}370  bool e1{};371  bool e2 = false;372  bool e3{true};373};374 375struct ExistingEnum {376  ExistingEnum(short) : e1(Foo), e2{Foo} {}377  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant378  // CHECK-FIXES: ExistingEnum(short) :  e2{Foo} {}379  ExistingEnum(int) : e1(Bar), e2{Bar} {}380  // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: member initializer for 'e2' is redundant381  // CHECK-FIXES: ExistingEnum(int) : e1(Bar) {}382  Enum e1 = Foo;383  Enum e2{Bar};384};385 386struct ExistingPointer {387  ExistingPointer(short) : e1(), e2{}, e3(), e4() {}388  // CHECK-MESSAGES: :[[@LINE-1]]:28: warning: member initializer for 'e1' is redundant389  // CHECK-MESSAGES: :[[@LINE-2]]:34: warning: member initializer for 'e2' is redundant390  // CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant391  // CHECK-FIXES: ExistingPointer(short) :  e4() {}392  ExistingPointer(int) : e1(0), e2{0}, e3(0), e4(&e1) {}393  // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant394  // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant395  // CHECK-MESSAGES: :[[@LINE-3]]:40: warning: member initializer for 'e3' is redundant396  // CHECK-FIXES: ExistingPointer(int) :  e4(&e1) {}397  ExistingPointer(long) : e1(nullptr), e2{nullptr}, e3(nullptr), e4(&e2) {}398  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant399  // CHECK-MESSAGES: :[[@LINE-2]]:40: warning: member initializer for 'e2' is redundant400  // CHECK-MESSAGES: :[[@LINE-3]]:53: warning: member initializer for 'e3' is redundant401  // CHECK-FIXES: ExistingPointer(long) :  e4(&e2) {}402  int *e1{};403  int *e2 = 0;404  int *e3{nullptr};405  int **e4 = &e1;406};407 408struct ExistingString {409  ExistingString(short) : e1(), e2{}, e3(), e4() {}410  // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: member initializer for 'e1' is redundant [modernize-use-default-member-init]411  // CHECK-MESSAGES: :[[@LINE-2]]:33: warning: member initializer for 'e2' is redundant412  // CHECK-FIXES: ExistingString(short) :  e3(), e4() {}413  ExistingString(int) : e1(0), e2{0}, e3(0), e4(0) {}414  // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: member initializer for 'e1' is redundant415  // CHECK-MESSAGES: :[[@LINE-2]]:32: warning: member initializer for 'e2' is redundant416  // CHECK-FIXES: ExistingString(int) :  e3(0), e4(0) {}417  ExistingString(long) : e1(nullptr), e2{nullptr}, e3(nullptr), e4(nullptr) {}418  // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: member initializer for 'e1' is redundant419  // CHECK-MESSAGES: :[[@LINE-2]]:39: warning: member initializer for 'e2' is redundant420  // CHECK-FIXES: ExistingString(long) :  e3(nullptr), e4(nullptr) {}421  ExistingString(char) : e1("foo"), e2{"foo"}, e3("foo"), e4("foo") {}422  // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: member initializer for 'e3' is redundant423  // CHECK-FIXES: ExistingString(char) : e1("foo"), e2{"foo"},  e4("foo") {}424  const char *e1{};425  const char *e2 = nullptr;426  const char *e3 = "foo";427  const char *e4 = "bar";428};429 430struct UnionExisting {431  UnionExisting() : e(5.0) {}432  // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: member initializer for 'e' is redundant433  // CHECK-FIXES: UnionExisting()  {}434  union {435    int i;436    double e = 5.0;437  };438};439 440template <typename T>441struct NegativeTemplateExisting {442  NegativeTemplateExisting(int) : t(0) {}443  T t{};444};445 446NegativeTemplateExisting<int> ntei(0);447NegativeTemplateExisting<double> nted(0);448 449// This resulted in a warning by default.450#define MACRO() \451  struct MacroS { \452    void *P; \453    MacroS() : P(nullptr) {} \454  };455 456MACRO();457 458 459class FunctionTryBlock {460public:461  FunctionTryBlock() try : i(5), k(8) {}462  // CHECK-FIXES: FunctionTryBlock() try  {}463  catch (...) {}464 465private:466  int i, k;467  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'i' [modernize-use-default-member-init]468  // CHECK-MESSAGES: :[[@LINE-2]]:10: warning: use default member initializer for 'k' [modernize-use-default-member-init]469  // CHECK-FIXES: int i{5}, k{8};470};471 472struct PR45363 {473  // Ensure no warning is emitted here474  PR45363(int i = 0) : m_i{i} {}475  int m_i;476};477 478struct EmptyBracedIntDefault {479  EmptyBracedIntDefault() : m_i{} {}480  int m_i;481  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'm_i' [modernize-use-default-member-init]482  // CHECK-FIXES:      EmptyBracedIntDefault()  {}483  // CHECK-FIXES-NEXT: int m_i{};484};485 486namespace PR63285 {487 488class ArrayValueInit {489  ArrayValueInit() : m_array() {}490  double m_array[1];491  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init]492  // CHECK-FIXES:      ArrayValueInit()  {}493  // CHECK-FIXES-NEXT: double m_array[1]{};494};495 496class ArrayBraceInit {497  ArrayBraceInit() : m_array{} {}498  double m_array[1];499  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init]500  // CHECK-FIXES:      ArrayBraceInit()  {}501  // CHECK-FIXES-NEXT: double m_array[1]{};502};503 504class ArrayBraceInitWithValue {505  ArrayBraceInitWithValue() : m_array{3.14} {}506  double m_array[1];507  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init]508  // CHECK-FIXES:      ArrayBraceInitWithValue()  {}509  // CHECK-FIXES-NEXT: double m_array[1]{3.14};510};511 512class ArrayBraceInitMultipleValues {513  ArrayBraceInitMultipleValues() : m_array{1.0, 2.0, 3.0} {}514  double m_array[3];515  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'm_array' [modernize-use-default-member-init]516  // CHECK-FIXES:      ArrayBraceInitMultipleValues()  {}517  // CHECK-FIXES-NEXT: double m_array[3]{1.0, 2.0, 3.0};518};519 520} // namespace PR63285521 522namespace PR122480 {523 524  static int STATIC_VAL = 23;525  constexpr const char* CONSTEXPR_REF = "Const";526 527  class StaticConstExprInit {528 529    StaticConstExprInit() : a{CONSTEXPR_REF}, b{STATIC_VAL}{}530    // CHECK-FIXES: StaticConstExprInit()  {}531    const char* a;532    // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use default member initializer for 'a' [modernize-use-default-member-init]533    // CHECK-FIXES: const char* a{CONSTEXPR_REF};534    int b;535    // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'b' [modernize-use-default-member-init]536    // CHECK-FIXES: int b{STATIC_VAL};537  };538 539class CStyleCastInit {540  CStyleCastInit() : a{(int)1.23}, b{(float)42}, c{(double)'C'} {}541  // CHECK-MESSAGES: :[[@LINE-1]]:50: warning: member initializer for 'c' is redundant [modernize-use-default-member-init]542  // CHECK-FIXES: CStyleCastInit()  {}543 544  int a;545  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'a' [modernize-use-default-member-init]546  // CHECK-FIXES: int a{(int)1.23};547  float b;548  // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use default member initializer for 'b' [modernize-use-default-member-init]549  // CHECK-FIXES: float b{(float)42};550  double c{(double)'C'};551};552 553class StaticCastInit {554  StaticCastInit() : m(static_cast<int>(9.99)), n(static_cast<char>(65)) {}555  // CHECK-MESSAGES: :[[@LINE-1]]:49: warning: member initializer for 'n' is redundant [modernize-use-default-member-init]556  // CHECK-FIXES: StaticCastInit()  {}557  int m;558  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'm' [modernize-use-default-member-init]559  // CHECK-FIXES: int m{static_cast<int>(9.99)};560  char n{static_cast<char>(65)};561};562 563class FunctionalCastInit {564  FunctionalCastInit() : a(int(5.67)), b(float(2)), c(double('C')) {}565  // CHECK-MESSAGES: :[[@LINE-1]]:40: warning: member initializer for 'b' is redundant [modernize-use-default-member-init]566  int a;567  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'a' [modernize-use-default-member-init]568  // CHECK-FIXES: int a{int(5.67)};569  float b{float(2)};570  double c;571  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'c' [modernize-use-default-member-init]572  // CHECK-FIXES: double c{double('C')};573};574 575#define ARITHMETIC_MACRO (44 - 2)576 577class DefaultMemberInitWithArithmetic {578  DefaultMemberInitWithArithmetic() : a{1 + 1},  b{1 + 11 + 123 + 1234},  c{2 + (4 / 2) + 3 + (7 / 11)},  d{ARITHMETIC_MACRO * 2}, e{1.2 + 3.4} {}579  // CHECK-MESSAGES: :[[@LINE-1]]:39: warning: member initializer for 'a' is redundant [modernize-use-default-member-init]580  // CHECK-FIXES: DefaultMemberInitWithArithmetic()  {}581 582  int a{1 + 1};583  int b;584  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'b' [modernize-use-default-member-init]585  // CHECK-FIXES:  int b{1 + 11 + 123 + 1234};586  int c;587  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'c' [modernize-use-default-member-init]588  // CHECK-FIXES: int c{2 + (4 / 2) + 3 + (7 / 11)};589  int d;590  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'd' [modernize-use-default-member-init]591  // CHECK-FIXES: int d{ARITHMETIC_MACRO * 2};592  double e;593  // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use default member initializer for 'e' [modernize-use-default-member-init]594  // CHECK-FIXES: double e{1.2 + 3.4};595 596};597 598} //namespace PR122480599 600namespace GH156295 {601 602class NotFix {603  NotFix(int v) : x(0 + 0 + (0 * 0 * (((((((v)))) - 20))) + 10)) {}604  int x;605};606 607class ShouldFix {608  ShouldFix(int v) : x(0 + 0 + (0 * 0 * (((((((1)))) - 20))) + 10)) {}609  int x;610  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use default member initializer for 'x' [modernize-use-default-member-init]611  // CHECK-FIXES: int x{0 + 0 + (0 * 0 * (((((((1)))) - 20))) + 10)};612};613 614} // namespace GH156295615 616namespace GH160394 {617struct A {618    A(int i) : f((i & 0x1f) == 1) {}619    bool f;620};621} // namespace GH160394622