1 // RUN: %check_clang_tidy -std=c++11-or-later %s bugprone-non-zero-enum-to-bool-conversion %t
2
3 namespace with::issue {
4
5 enum class EStatusC : char {
6 SUCCESS = 1,
7 FAILURE = 2,
8 INVALID_PARAM = 3,
9 UNKNOWN = 4
10 };
11
testEnumConversion(EStatusC value)12 bool testEnumConversion(EStatusC value) {
13 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EStatusC' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
14 return static_cast<bool>(value);
15 }
16
17 enum class EStatusS : short {
18 SUCCESS = 1,
19 FAILURE = 2,
20 INVALID_PARAM = 3,
21 UNKNOWN = 4
22 };
23
testEnumConversion(EStatusS value)24 bool testEnumConversion(EStatusS value) {
25 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EStatusS' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
26 return static_cast<bool>(value);
27 }
28
29
30 enum class EStatusI : int {
31 SUCCESS = 1,
32 FAILURE = 2,
33 INVALID_PARAM = 3,
34 UNKNOWN = 4
35 };
36
testEnumConversion(EStatusI value)37 bool testEnumConversion(EStatusI value) {
38 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EStatusI' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
39 return static_cast<bool>(value);
40 }
41
42 enum class EStatus {
43 SUCCESS = 1,
44 FAILURE = 2,
45 INVALID_PARAM = 3,
46 UNKNOWN = 4
47 };
48
testEnumConversion(EStatus value)49 bool testEnumConversion(EStatus value) {
50 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EStatus' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
51 return static_cast<bool>(value);
52 }
53
54 namespace enum_int {
55
56 enum EResult : int {
57 OK = 1,
58 NOT_OK
59 };
60
testEnumConversion(const EResult & value)61 bool testEnumConversion(const EResult& value) {
62 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EResult' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
63 return value;
64 }
65
66 }
67
68 namespace enum_short {
69
70 enum EResult : short {
71 OK = 1,
72 NOT_OK
73 };
74
testEnumConversion(const EResult & value)75 bool testEnumConversion(const EResult& value) {
76 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EResult' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
77 return value;
78 }
79
80 }
81
82 namespace enum_char {
83
84 enum EResult : char {
85 OK = 1,
86 NOT_OK
87 };
88
testEnumConversion(const EResult & value)89 bool testEnumConversion(const EResult& value) {
90 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EResult' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
91 return value;
92 }
93
94 }
95
96 namespace enum_default {
97
98 enum EResult {
99 OK = 1,
100 NOT_OK
101 };
102
testEnumConversion(const EResult & value)103 bool testEnumConversion(const EResult& value) {
104 // CHECK-MESSAGES: :[[@LINE+1]]:10: warning: conversion of 'EResult' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
105 return value;
106 }
107
108 }
109
110 }
111