// RUN: %check_clang_tidy %s readability-enum-initial-value %t // RUN: %check_clang_tidy -check-suffix=ENABLE %s readability-enum-initial-value %t -- \ // RUN: -config='{CheckOptions: { \ // RUN: readability-enum-initial-value.AllowExplicitZeroFirstInitialValue: false, \ // RUN: readability-enum-initial-value.AllowExplicitSequentialInitialValues: false, \ // RUN: }}' enum EError { // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum 'EError' are not consistent // CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum 'EError' are not consistent EError_a = 1, EError_b, // CHECK-FIXES: EError_b = 2, EError_c = 3, }; enum ENone { ENone_a, ENone_b, EENone_c, }; enum EFirst { EFirst_a = 1, EFirst_b, EFirst_c, }; enum EAll { EAll_a = 1, EAll_b = 2, EAll_c = 4, }; #define ENUMERATOR_1 EMacro1_b enum EMacro1 { // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum 'EMacro1' are not consistent // CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum 'EMacro1' are not consistent EMacro1_a = 1, ENUMERATOR_1, // CHECK-FIXES: ENUMERATOR_1 = 2, EMacro1_c = 3, }; #define ENUMERATOR_2 EMacro2_b = 2 enum EMacro2 { // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum 'EMacro2' are not consistent // CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum 'EMacro2' are not consistent EMacro2_a = 1, ENUMERATOR_2, EMacro2_c, // CHECK-FIXES: EMacro2_c = 3, }; enum { // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum '' are not consistent // CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum '' are not consistent EAnonymous_a = 1, EAnonymous_b, // CHECK-FIXES: EAnonymous_b = 2, EAnonymous_c = 3, }; enum EnumZeroFirstInitialValue { EnumZeroFirstInitialValue_0 = 0, // CHECK-MESSAGES-ENABLE: :[[@LINE-1]]:3: warning: zero initial value for the first enumerator in 'EnumZeroFirstInitialValue' can be disregarded // CHECK-FIXES-ENABLE: EnumZeroFirstInitialValue_0 , EnumZeroFirstInitialValue_1, EnumZeroFirstInitialValue_2, }; enum EnumZeroFirstInitialValueWithComment { EnumZeroFirstInitialValueWithComment_0 = /* == */ 0, // CHECK-MESSAGES-ENABLE: :[[@LINE-1]]:3: warning: zero initial value for the first enumerator in 'EnumZeroFirstInitialValueWithComment' can be disregarded // CHECK-FIXES-ENABLE: EnumZeroFirstInitialValueWithComment_0 /* == */ , EnumZeroFirstInitialValueWithComment_1, EnumZeroFirstInitialValueWithComment_2, }; enum EnumSequentialInitialValue { // CHECK-MESSAGES-ENABLE: :[[@LINE-1]]:1: warning: sequential initial value in 'EnumSequentialInitialValue' can be ignored EnumSequentialInitialValue_0 = 2, // CHECK-FIXES-ENABLE: EnumSequentialInitialValue_0 = 2, EnumSequentialInitialValue_1 = 3, // CHECK-FIXES-ENABLE: EnumSequentialInitialValue_1 , EnumSequentialInitialValue_2 = 4, // CHECK-FIXES-ENABLE: EnumSequentialInitialValue_2 , }; // gh107590 enum WithFwdDeclInconsistent : int; enum WithFwdDeclInconsistent : int { // CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum 'WithFwdDeclInconsistent' are not consistent // CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum 'WithFwdDeclInconsistent' are not consistent EFI0, // CHECK-FIXES: EFI0 = 0, EFI1 = 1, EFI2, // CHECK-FIXES: EFI2 = 2, }; enum WithFwdDeclZeroFirst : int; enum WithFwdDeclZeroFirst : int { // CHECK-MESSAGES-ENABLE: :[[@LINE+1]]:3: warning: zero initial value for the first enumerator in 'WithFwdDeclZeroFirst' can be disregarded EFZ0 = 0, // CHECK-FIXES-ENABLE: EFZ0 , EFZ1, EFZ2, }; enum WithFwdDeclSequential : int; enum WithFwdDeclSequential : int { // CHECK-MESSAGES-ENABLE: :[[@LINE-1]]:1: warning: sequential initial value in 'WithFwdDeclSequential' can be ignored EFS0 = 2, // CHECK-FIXES-ENABLE: EFS0 = 2, EFS1 = 3, // CHECK-FIXES-ENABLE: EFS1 , EFS2 = 4, // CHECK-FIXES-ENABLE: EFS2 , };