1*e45e091bSCongcong Cai // RUN: %check_clang_tidy -check-suffix=DEFAULT %s \
2*e45e091bSCongcong Cai // RUN: bugprone-narrowing-conversions %t --
3*e45e091bSCongcong Cai 
4*e45e091bSCongcong Cai // RUN: %check_clang_tidy -check-suffix=DISABLED %s \
5*e45e091bSCongcong Cai // RUN: bugprone-narrowing-conversions %t -- \
6*e45e091bSCongcong Cai // RUN: -config='{CheckOptions: { \
7*e45e091bSCongcong Cai // RUN:   bugprone-narrowing-conversions.WarnOnEquivalentBitWidth: 0}}'
8*e45e091bSCongcong Cai 
9*e45e091bSCongcong Cai void narrowing_equivalent_bitwidth() {
10*e45e091bSCongcong Cai   int i;
11*e45e091bSCongcong Cai   unsigned int ui;
12*e45e091bSCongcong Cai   i = ui;
13*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
14*e45e091bSCongcong Cai   // DISABLED: Warning disabled with WarnOnEquivalentBitWidth=0.
15*e45e091bSCongcong Cai 
16*e45e091bSCongcong Cai   float f;
17*e45e091bSCongcong Cai   i = f;
18*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'float' to 'int' [bugprone-narrowing-conversions]
19*e45e091bSCongcong Cai   // DISABLED: Warning disabled with WarnOnEquivalentBitWidth=0.
20*e45e091bSCongcong Cai 
21*e45e091bSCongcong Cai   f = i;
22*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'int' to 'float' [bugprone-narrowing-conversions]
23*e45e091bSCongcong Cai   // DISABLED: Warning disabled with WarnOnEquivalentBitWidth=0.
24*e45e091bSCongcong Cai 
25*e45e091bSCongcong Cai   long long ll;
26*e45e091bSCongcong Cai   double d;
27*e45e091bSCongcong Cai   ll = d;
28*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:8: warning: narrowing conversion from 'double' to 'long long' [bugprone-narrowing-conversions]
29*e45e091bSCongcong Cai   // DISABLED: Warning disabled with WarnOnEquivalentBitWidth=0.
30*e45e091bSCongcong Cai 
31*e45e091bSCongcong Cai   d = ll;
32*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'long long' to 'double' [bugprone-narrowing-conversions]
33*e45e091bSCongcong Cai   // DISABLED: Warning disabled with WarnOnEquivalentBitWidth=0.
34*e45e091bSCongcong Cai }
35*e45e091bSCongcong Cai 
36*e45e091bSCongcong Cai void most_narrowing_is_not_ok() {
37*e45e091bSCongcong Cai   int i;
38*e45e091bSCongcong Cai   long long ui;
39*e45e091bSCongcong Cai   i = ui;
40*e45e091bSCongcong Cai   // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:7: warning: narrowing conversion from 'long long' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
41*e45e091bSCongcong Cai   // CHECK-MESSAGES-DISABLED: :[[@LINE-2]]:7: warning: narrowing conversion from 'long long' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
42*e45e091bSCongcong Cai }
43