1*89a1d03eSRichard // RUN: %check_clang_tidy %s modernize-deprecated-ios-base-aliases %t 2*89a1d03eSRichard 3*89a1d03eSRichard namespace std { 4*89a1d03eSRichard class ios_base { 5*89a1d03eSRichard public: 6*89a1d03eSRichard typedef int io_state; 7*89a1d03eSRichard typedef int open_mode; 8*89a1d03eSRichard typedef int seek_dir; 9*89a1d03eSRichard 10*89a1d03eSRichard typedef int streampos; 11*89a1d03eSRichard typedef int streamoff; 12*89a1d03eSRichard }; 13*89a1d03eSRichard 14*89a1d03eSRichard template <class CharT> 15*89a1d03eSRichard class basic_ios : public ios_base { 16*89a1d03eSRichard }; 17*89a1d03eSRichard } // namespace std 18*89a1d03eSRichard 19*89a1d03eSRichard // Test function return values (declaration) 20*89a1d03eSRichard std::ios_base::io_state f_5(); 21*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'std::ios_base::io_state' is deprecated; use 'std::ios_base::iostate' instead [modernize-deprecated-ios-base-aliases] 22*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate f_5(); 23*89a1d03eSRichard 24*89a1d03eSRichard // Test function parameters. 25*89a1d03eSRichard void f_6(std::ios_base::open_mode); 26*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: 'std::ios_base::open_mode' is deprecated 27*89a1d03eSRichard // CHECK-FIXES: void f_6(std::ios_base::openmode); 28*89a1d03eSRichard void f_7(const std::ios_base::seek_dir &); 29*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: 'std::ios_base::seek_dir' is deprecated 30*89a1d03eSRichard // CHECK-FIXES: void f_7(const std::ios_base::seekdir &); 31*89a1d03eSRichard 32*89a1d03eSRichard // Test on record type fields. 33*89a1d03eSRichard struct A { 34*89a1d03eSRichard std::ios_base::io_state field; 35*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 36*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate field; 37*89a1d03eSRichard 38*89a1d03eSRichard typedef std::ios_base::io_state int_ptr_type; 39*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: 'std::ios_base::io_state' is deprecated 40*89a1d03eSRichard // CHECK-FIXES: typedef std::ios_base::iostate int_ptr_type; 41*89a1d03eSRichard }; 42*89a1d03eSRichard 43*89a1d03eSRichard struct B : public std::ios_base { 44*89a1d03eSRichard io_state a; 45*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'std::ios_base::io_state' is deprecated 46*89a1d03eSRichard // CHECK-FIXES: iostate a; 47*89a1d03eSRichard }; 48*89a1d03eSRichard 49*89a1d03eSRichard struct C : public std::basic_ios<char> { 50*89a1d03eSRichard io_state a; 51*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'std::ios_base::io_state' is deprecated 52*89a1d03eSRichard // CHECK-FIXES: iostate a; 53*89a1d03eSRichard }; 54*89a1d03eSRichard f_1()55*89a1d03eSRichardvoid f_1() { 56*89a1d03eSRichard std::ios_base::io_state a; 57*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 58*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate a; 59*89a1d03eSRichard 60*89a1d03eSRichard // Check that spaces aren't modified unnecessarily. 61*89a1d03eSRichard std :: ios_base :: io_state b; 62*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: 'std::ios_base::io_state' is deprecated 63*89a1d03eSRichard // CHECK-FIXES: std :: ios_base :: iostate b; 64*89a1d03eSRichard 65*89a1d03eSRichard // Test construction from a temporary. 66*89a1d03eSRichard std::ios_base::io_state c = std::ios_base::io_state{}; 67*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 68*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-2]]:46: warning: 'std::ios_base::io_state' is deprecated 69*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate c = std::ios_base::iostate{}; 70*89a1d03eSRichard 71*89a1d03eSRichard typedef std::ios_base::io_state alias1; 72*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: 'std::ios_base::io_state' is deprecated 73*89a1d03eSRichard // CHECK-FIXES: typedef std::ios_base::iostate alias1; 74*89a1d03eSRichard alias1 d(a); 75*89a1d03eSRichard 76*89a1d03eSRichard using alias2 = std::ios_base::io_state; 77*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: 'std::ios_base::io_state' is deprecated 78*89a1d03eSRichard // CHECK-FIXES: using alias2 = std::ios_base::iostate; 79*89a1d03eSRichard alias2 e; 80*89a1d03eSRichard 81*89a1d03eSRichard // Test pointers. 82*89a1d03eSRichard std::ios_base::io_state *f; 83*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 84*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate *f; 85*89a1d03eSRichard 86*89a1d03eSRichard // Test 'static' declarations. 87*89a1d03eSRichard static std::ios_base::io_state g; 88*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: 'std::ios_base::io_state' is deprecated 89*89a1d03eSRichard // CHECK-FIXES: static std::ios_base::iostate g; 90*89a1d03eSRichard 91*89a1d03eSRichard // Test with cv-qualifiers. 92*89a1d03eSRichard const std::ios_base::io_state h(0); 93*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:24: warning: 'std::ios_base::io_state' is deprecated 94*89a1d03eSRichard // CHECK-FIXES: const std::ios_base::iostate h(0); 95*89a1d03eSRichard volatile std::ios_base::io_state i; 96*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'std::ios_base::io_state' is deprecated 97*89a1d03eSRichard // CHECK-FIXES: volatile std::ios_base::iostate i; 98*89a1d03eSRichard const volatile std::ios_base::io_state j(0); 99*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:33: warning: 'std::ios_base::io_state' is deprecated 100*89a1d03eSRichard // CHECK-FIXES: const volatile std::ios_base::iostate j(0); 101*89a1d03eSRichard 102*89a1d03eSRichard // Test auto and initializer-list. 103*89a1d03eSRichard auto k = std::ios_base::io_state{}; 104*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'std::ios_base::io_state' is deprecated 105*89a1d03eSRichard // CHECK-FIXES: auto k = std::ios_base::iostate{}; 106*89a1d03eSRichard 107*89a1d03eSRichard std::ios_base::io_state l{std::ios_base::io_state()}; 108*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 109*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-2]]:44: warning: 'std::ios_base::io_state' is deprecated 110*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate l{std::ios_base::iostate()}; 111*89a1d03eSRichard 112*89a1d03eSRichard // Test temporaries. 113*89a1d03eSRichard std::ios_base::io_state(); 114*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::io_state' is deprecated 115*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate(); 116*89a1d03eSRichard 117*89a1d03eSRichard // Test inherited type usage 118*89a1d03eSRichard std::basic_ios<char>::io_state m; 119*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: 'std::ios_base::io_state' is deprecated 120*89a1d03eSRichard // CHECK-FIXES: std::basic_ios<char>::iostate m; 121*89a1d03eSRichard 122*89a1d03eSRichard std::ios_base::streampos n; 123*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::streampos' is deprecated [modernize-deprecated-ios-base-aliases] 124*89a1d03eSRichard 125*89a1d03eSRichard std::ios_base::streamoff o; 126*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'std::ios_base::streamoff' is deprecated [modernize-deprecated-ios-base-aliases] 127*89a1d03eSRichard } 128*89a1d03eSRichard 129*89a1d03eSRichard // Test without the nested name specifiers. f_2()130*89a1d03eSRichardvoid f_2() { 131*89a1d03eSRichard using namespace std; 132*89a1d03eSRichard 133*89a1d03eSRichard ios_base::io_state a; 134*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: 'std::ios_base::io_state' is deprecated 135*89a1d03eSRichard // CHECK-FIXES: ios_base::iostate a; 136*89a1d03eSRichard } 137*89a1d03eSRichard 138*89a1d03eSRichard // Test messing-up with macros. f_4()139*89a1d03eSRichardvoid f_4() { 140*89a1d03eSRichard #define MACRO_1 std::ios_base::io_state 141*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: 'std::ios_base::io_state' is deprecated 142*89a1d03eSRichard MACRO_1 a; 143*89a1d03eSRichard 144*89a1d03eSRichard #define MACRO_2 io_state 145*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: 'std::ios_base::io_state' is deprecated 146*89a1d03eSRichard std::ios_base::MACRO_2 b; 147*89a1d03eSRichard 148*89a1d03eSRichard #define MACRO_3 std::ios_base 149*89a1d03eSRichard MACRO_3::io_state c; 150*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'std::ios_base::io_state' is deprecated 151*89a1d03eSRichard 152*89a1d03eSRichard #define MACRO_4(type) type::io_state 153*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:29: warning: 'std::ios_base::io_state' is deprecated 154*89a1d03eSRichard MACRO_4(std::ios_base) d; 155*89a1d03eSRichard 156*89a1d03eSRichard #undef MACRO_1 157*89a1d03eSRichard #undef MACRO_2 158*89a1d03eSRichard #undef MACRO_3 159*89a1d03eSRichard #undef MACRO_4 160*89a1d03eSRichard } 161*89a1d03eSRichard 162*89a1d03eSRichard // Test function return values (definition). f_5()163*89a1d03eSRichardstd::ios_base::io_state f_5() 164*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: 'std::ios_base::io_state' is deprecated 165*89a1d03eSRichard // CHECK-FIXES: std::ios_base::iostate f_5() 166*89a1d03eSRichard { 167*89a1d03eSRichard // Test constructor. 168*89a1d03eSRichard return std::ios_base::io_state(0); 169*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: 'std::ios_base::io_state' is deprecated 170*89a1d03eSRichard // CHECK-FIXES: return std::ios_base::iostate(0); 171*89a1d03eSRichard } 172*89a1d03eSRichard 173*89a1d03eSRichard // Test that other aliases with same name aren't replaced 174*89a1d03eSRichard struct my_ios_base { 175*89a1d03eSRichard typedef int io_state; 176*89a1d03eSRichard }; 177*89a1d03eSRichard 178*89a1d03eSRichard namespace ns_1 { 179*89a1d03eSRichard struct my_ios_base2 { 180*89a1d03eSRichard typedef int io_state; 181*89a1d03eSRichard }; 182*89a1d03eSRichard } // namespace ns_1 183*89a1d03eSRichard f_8()184*89a1d03eSRichardvoid f_8() { 185*89a1d03eSRichard my_ios_base::io_state a; 186*89a1d03eSRichard 187*89a1d03eSRichard ns_1::my_ios_base2::io_state b; 188*89a1d03eSRichard } 189*89a1d03eSRichard 190*89a1d03eSRichard // Test templates 191*89a1d03eSRichard template <typename X> f_9()192*89a1d03eSRichardvoid f_9() { 193*89a1d03eSRichard typename std::basic_ios<X>::io_state p; 194*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: 'std::ios_base::io_state' is deprecated 195*89a1d03eSRichard typename std::ios_base::io_state q; 196*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:27: warning: 'std::ios_base::io_state' is deprecated 197*89a1d03eSRichard // CHECK-FIXES: typename std::ios_base::iostate q; 198*89a1d03eSRichard } 199*89a1d03eSRichard 200*89a1d03eSRichard template <typename T> f_10(T arg)201*89a1d03eSRichardvoid f_10(T arg) { 202*89a1d03eSRichard T x(arg); 203*89a1d03eSRichard } 204*89a1d03eSRichard 205*89a1d03eSRichard template <typename T> f_11()206*89a1d03eSRichardvoid f_11() { 207*89a1d03eSRichard typename T::io_state x{}; 208*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: 'std::ios_base::io_state' is deprecated 209*89a1d03eSRichard } 210*89a1d03eSRichard 211*89a1d03eSRichard template <typename T> 212*89a1d03eSRichard struct D : std::ios_base { 213*89a1d03eSRichard io_state a; 214*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'std::ios_base::io_state' is deprecated 215*89a1d03eSRichard // CHECK-FIXES: iostate a; 216*89a1d03eSRichard 217*89a1d03eSRichard typename std::basic_ios<T>::io_state b; 218*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:31: warning: 'std::ios_base::io_state' is deprecated 219*89a1d03eSRichard }; 220*89a1d03eSRichard 221*89a1d03eSRichard template <typename T> 222*89a1d03eSRichard struct E { 223*89a1d03eSRichard T t; 224*89a1d03eSRichard }; 225*89a1d03eSRichard f_12()226*89a1d03eSRichardvoid f_12() { 227*89a1d03eSRichard f_9<char>(); 228*89a1d03eSRichard 229*89a1d03eSRichard f_10<std::ios_base::io_state>(0); 230*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: 'std::ios_base::io_state' is deprecated 231*89a1d03eSRichard // CHECK-FIXES: f_10<std::ios_base::iostate>(0); 232*89a1d03eSRichard 233*89a1d03eSRichard f_11<std::ios_base>(); 234*89a1d03eSRichard D<char> d; 235*89a1d03eSRichard 236*89a1d03eSRichard E<std::ios_base::io_state> e; 237*89a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: 'std::ios_base::io_state' is deprecated 238*89a1d03eSRichard // CHECK-FIXES: E<std::ios_base::iostate> e; 239*89a1d03eSRichard } 240