-
Notifications
You must be signed in to change notification settings - Fork 14.9k
[clang-tidy] Teach readability-uppercase-literal-suffix
about C++23 and C23 suffixes
#148275
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 7 commits
b19ad9c
4b627b9
e1f4c02
0b7a032
13dde54
a66068b
ae7e793
7c41b0a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
//===--- stdfloat - Stub header for tests -----------------------*- C++ -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef _STDFLOAT_ | ||
#define _STDFLOAT_ | ||
|
||
namespace std { | ||
|
||
// TODO: define std::float16_t and friends | ||
|
||
} | ||
|
||
#endif // _STDFLOAT_ |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
// TODO: When Clang adds support for decimal floating point types, enable these tests by: | ||
// 1. Removing all the #if 0 + #endif guards. | ||
// 2. Removing all occurrences of the string "DISABLED-" in this file. | ||
// 3. Deleting this message. | ||
|
||
// RUN: %check_clang_tidy -std=c23-or-later %s readability-uppercase-literal-suffix %t | ||
// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.c | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do we need There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Our win tests may have |
||
// RUN: clang-tidy %t.c -checks='-*,readability-uppercase-literal-suffix' -fix -- -std=c23 | ||
// RUN: clang-tidy %t.c -checks='-*,readability-uppercase-literal-suffix' -warnings-as-errors='-*,readability-uppercase-literal-suffix' -- -std=c23 | ||
|
||
void bit_precise_literal_suffix() { | ||
// _BitInt() | ||
|
||
static constexpr auto v1 = 1wb; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'wb', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v1 = 1wb; | ||
// CHECK-MESSAGES-NEXT: ^~~ | ||
// CHECK-MESSAGES-NEXT: WB{{$}} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need these messages? I haven't seen them in other tests and they look obsolete (considering we have CHECK-FIXES). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm parroting the existing There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think yes, remove unnecessary CHECK-FIXES-NEXT. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The idea is that we copy the test, run the check and apply fixes, then run the check again to make sure there are no more warnings. (I’m not sure how much value this adds on top of the usual There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you for description! A separate file won't do much, and I don't see any value in running check multiple times over corrected file, so I vote to remove it. If this thing is ever needed, I think it should go to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The only benefit I see is to don't write GOOD cases. So the workflow would be like:
So since we write all good cases explicitly (I hope so) then we don't need double-run. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
+1 I’ll go and remove it from this and existing tests |
||
// CHECK-FIXES: static constexpr auto v1 = 1WB; | ||
static_assert(v1 == 1WB); | ||
|
||
static constexpr auto v2 = 1WB; // OK. | ||
static_assert(v2 == 1WB); | ||
|
||
// _BitInt() Unsigned | ||
|
||
static constexpr auto v3 = 1wbu; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'wbu', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v3 = 1wbu; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: WBU{{$}} | ||
// CHECK-FIXES: static constexpr auto v3 = 1WBU; | ||
static_assert(v3 == 1WBU); | ||
|
||
static constexpr auto v4 = 1WBu; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'WBu', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v4 = 1WBu; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: WBU{{$}} | ||
// CHECK-FIXES: static constexpr auto v4 = 1WBU; | ||
static_assert(v4 == 1WBU); | ||
|
||
static constexpr auto v5 = 1wbU; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'wbU', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v5 = 1wbU; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: WBU{{$}} | ||
// CHECK-FIXES: static constexpr auto v5 = 1WBU; | ||
static_assert(v5 == 1WBU); | ||
|
||
static constexpr auto v6 = 1WBU; // OK. | ||
static_assert(v6 == 1WBU); | ||
|
||
// Unsigned _BitInt() | ||
|
||
static constexpr auto v7 = 1uwb; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'uwb', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v7 = 1uwb; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: UWB{{$}} | ||
// CHECK-FIXES: static constexpr auto v7 = 1UWB; | ||
static_assert(v7 == 1UWB); | ||
|
||
static constexpr auto v8 = 1uWB; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'uWB', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v8 = 1uWB; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: UWB{{$}} | ||
// CHECK-FIXES: static constexpr auto v8 = 1UWB; | ||
static_assert(v8 == 1UWB); | ||
|
||
static constexpr auto v9 = 1Uwb; | ||
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: integer literal has suffix 'Uwb', which is not uppercase | ||
// CHECK-MESSAGES-NEXT: static constexpr auto v9 = 1Uwb; | ||
// CHECK-MESSAGES-NEXT: ^~~~ | ||
// CHECK-MESSAGES-NEXT: UWB{{$}} | ||
// CHECK-FIXES: static constexpr auto v9 = 1UWB; | ||
static_assert(v9 == 1UWB); | ||
|
||
static constexpr auto v10 = 1UWB; // OK. | ||
static_assert(v10 == 1UWB); | ||
} | ||
|
||
void decimal_floating_point_suffix() { | ||
// _Decimal32 | ||
|
||
#if 0 | ||
static constexpr auto v1 = 1.df; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:30: warning: floating point literal has suffix 'df', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v1 = 1.df; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DF{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v1 = 1.DF; | ||
static_assert(v1 == 1.DF); | ||
|
||
static constexpr auto v2 = 1.e0df; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:30: warning: floating point literal has suffix 'df', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v2 = 1.e0df; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DF{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v2 = 1.e0DF; | ||
static_assert(v2 == 1.DF); | ||
|
||
static constexpr auto v3 = 1.DF; // OK. | ||
static_assert(v3 == 1.DF); | ||
|
||
static constexpr auto v4 = 1.e0DF; // OK. | ||
static_assert(v4 == 1.DF); | ||
#endif | ||
|
||
// _Decimal64 | ||
|
||
#if 0 | ||
static constexpr auto v5 = 1.dd; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:30: warning: floating point literal has suffix 'dd', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v5 = 1.dd; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DD{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v5 = 1.DD; | ||
static_assert(v5 == 1.DD); | ||
|
||
static constexpr auto v6 = 1.e0dd; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:30: warning: floating point literal has suffix 'dd', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v6 = 1.e0dd; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DD{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v6 = 1.e0DD; | ||
static_assert(v6 == 1.DD); | ||
|
||
static constexpr auto v7 = 1.DD; // OK. | ||
static_assert(v7 == 1.DD); | ||
|
||
static constexpr auto v8 = 1.e0DD; // OK. | ||
static_assert(v8 == 1.DD); | ||
#endif | ||
|
||
// _Decimal128 | ||
|
||
#if 0 | ||
static constexpr auto v9 = 1.dl; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:30: warning: floating point literal has suffix 'dl', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v9 = 1.dl; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DL{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v9 = 1.DL; | ||
static_assert(v9 == 1.DL); | ||
|
||
static constexpr auto v10 = 1.e0dl; | ||
// DISABLED-CHECK-MESSAGES: :[[@LINE-1]]:31: warning: floating point literal has suffix 'dl', which is not uppercase | ||
// DISABLED-CHECK-MESSAGES-NEXT: static constexpr auto v10 = 1.e0dl; | ||
// DISABLED-CHECK-MESSAGES-NEXT: ^ ~ | ||
// DISABLED-CHECK-MESSAGES-NEXT: DL{{$}} | ||
// DISABLED-CHECK-FIXES: static constexpr auto v10 = 1.e0DL; | ||
static_assert(v10 == 1.DL); | ||
|
||
static constexpr auto v11 = 1.DL; // OK. | ||
static_assert(v11 == 1.DL); | ||
|
||
static constexpr auto v12 = 1.e0DL; // OK. | ||
static_assert(v12 == 1.DL); | ||
#endif | ||
} |
Uh oh!
There was an error while loading. Please reload this page.