19081d3d8SHaojian Wu // RUN: %check_clang_tidy %s readability-uppercase-literal-suffix %t -- -- -target x86_64-pc-linux-gnu -I %clang_tidy_headers -fms-extensions
289a1d03eSRichard // RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
39081d3d8SHaojian Wu // RUN: clang-tidy %t.cpp -checks='-*,readability-uppercase-literal-suffix' -fix -- -target x86_64-pc-linux-gnu -I %clang_tidy_headers -fms-extensions
49081d3d8SHaojian Wu // RUN: clang-tidy %t.cpp -checks='-*,readability-uppercase-literal-suffix' -warnings-as-errors='-*,readability-uppercase-literal-suffix' -- -target x86_64-pc-linux-gnu -I %clang_tidy_headers -fms-extensions
589a1d03eSRichard 
69081d3d8SHaojian Wu #include "integral_constant.h"
789a1d03eSRichard 
integer_suffix()889a1d03eSRichard void integer_suffix() {
989a1d03eSRichard   static constexpr auto v0 = __LINE__; // synthetic
1089a1d03eSRichard   static_assert(v0 == 9 || v0 == 5, "");
1189a1d03eSRichard 
1289a1d03eSRichard   static constexpr auto v1 = __cplusplus; // synthetic, long
1389a1d03eSRichard 
1489a1d03eSRichard   static constexpr auto v2 = 1; // no literal
1589a1d03eSRichard   static_assert(is_same<decltype(v2), const int>::value, "");
1689a1d03eSRichard   static_assert(v2 == 1, "");
1789a1d03eSRichard 
1889a1d03eSRichard   // i32
1989a1d03eSRichard 
2089a1d03eSRichard   static constexpr auto v3 = 1i32;
2189a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'i32', which is not uppercase
2289a1d03eSRichard   // CHECK-MESSAGES-NEXT: static constexpr auto v3 = 1i32;
2389a1d03eSRichard   // CHECK-MESSAGES-NEXT: ^~
24*f63155aaSTimm Bäder   // CHECK-MESSAGES-NEXT: I32{{$}}
2589a1d03eSRichard   // CHECK-FIXES: static constexpr auto v3 = 1I32;
2689a1d03eSRichard   static_assert(is_same<decltype(v3), const int>::value, "");
2789a1d03eSRichard   static_assert(v3 == 1I32, "");
2889a1d03eSRichard 
2989a1d03eSRichard   static constexpr auto v4 = 1I32; // OK.
3089a1d03eSRichard   static_assert(is_same<decltype(v4), const int>::value, "");
3189a1d03eSRichard   static_assert(v4 == 1I32, "");
3289a1d03eSRichard 
3389a1d03eSRichard   // i64
3489a1d03eSRichard 
3589a1d03eSRichard   static constexpr auto v5 = 1i64;
3689a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'i64', which is not uppercase
3789a1d03eSRichard   // CHECK-MESSAGES-NEXT: static constexpr auto v5 = 1i64;
3889a1d03eSRichard   // CHECK-MESSAGES-NEXT: ^~
39*f63155aaSTimm Bäder   // CHECK-MESSAGES-NEXT: I64{{$}}
4089a1d03eSRichard   // CHECK-FIXES: static constexpr auto v5 = 1I64;
4189a1d03eSRichard   static_assert(is_same<decltype(v5), const long int>::value, "");
4289a1d03eSRichard   static_assert(v5 == 1I64, "");
4389a1d03eSRichard 
4489a1d03eSRichard   static constexpr auto v6 = 1I64; // OK.
4589a1d03eSRichard   static_assert(is_same<decltype(v6), const long int>::value, "");
4689a1d03eSRichard   static_assert(v6 == 1I64, "");
4789a1d03eSRichard 
4889a1d03eSRichard   // i16
4989a1d03eSRichard 
5089a1d03eSRichard   static constexpr auto v7 = 1i16;
5189a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'i16', which is not uppercase
5289a1d03eSRichard   // CHECK-MESSAGES-NEXT: static constexpr auto v7 = 1i16;
5389a1d03eSRichard   // CHECK-MESSAGES-NEXT: ^~
54*f63155aaSTimm Bäder   // CHECK-MESSAGES-NEXT: I16{{$}}
5589a1d03eSRichard   // CHECK-FIXES: static constexpr auto v7 = 1I16;
5689a1d03eSRichard   static_assert(is_same<decltype(v7), const short>::value, "");
5789a1d03eSRichard   static_assert(v7 == 1I16, "");
5889a1d03eSRichard 
5989a1d03eSRichard   static constexpr auto v8 = 1I16; // OK.
6089a1d03eSRichard   static_assert(is_same<decltype(v8), const short>::value, "");
6189a1d03eSRichard   static_assert(v8 == 1I16, "");
6289a1d03eSRichard 
6389a1d03eSRichard   // i8
6489a1d03eSRichard 
6589a1d03eSRichard   static constexpr auto v9 = 1i8;
6689a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'i8', which is not uppercase
6789a1d03eSRichard   // CHECK-MESSAGES-NEXT: static constexpr auto v9 = 1i8;
6889a1d03eSRichard   // CHECK-MESSAGES-NEXT: ^~
69*f63155aaSTimm Bäder   // CHECK-MESSAGES-NEXT: I8{{$}}
7089a1d03eSRichard   // CHECK-FIXES: static constexpr auto v9 = 1I8;
7189a1d03eSRichard   static_assert(is_same<decltype(v9), const char>::value, "");
7289a1d03eSRichard   static_assert(v9 == 1I8, "");
7389a1d03eSRichard 
7489a1d03eSRichard   static constexpr auto v10 = 1I8; // OK.
7589a1d03eSRichard   static_assert(is_same<decltype(v10), const char>::value, "");
7689a1d03eSRichard   static_assert(v10 == 1I8, "");
7789a1d03eSRichard }
78