-// RUN: %check_clang_tidy %s abseil-duration-unnecessary-conversion %t -- -- -I%S/Inputs
+// RUN: %check_clang_tidy -std=c++11,c++14 %s abseil-duration-unnecessary-conversion %t -- -- -I %S/Inputs
+// FIXME: Fix the checker to work in C++17 mode.
#include "absl/time/time.h"
-// RUN: %check_clang_tidy %s abseil-faster-strsplit-delimiter %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s abseil-faster-strsplit-delimiter %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace absl {
-// RUN: %check_clang_tidy %s abseil-str-cat-append %t -- -- -I%S -std=c++11
+// RUN: %check_clang_tidy %s abseil-str-cat-append %t
typedef unsigned __INT16_TYPE__ char16;
typedef unsigned __INT32_TYPE__ char32;
// RUN: %check_clang_tidy %s abseil-string-find-startswith %t -- \
-// RUN: -config="{CheckOptions: [{key: 'abseil-string-find-startswith.StringLikeClasses', value: '::std::basic_string;::basic_string'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: 'abseil-string-find-startswith.StringLikeClasses', value: '::std::basic_string;::basic_string'}]}"
namespace std {
template <typename T> class allocator {};
-// RUN: %check_clang_tidy %s abseil-time-subtraction %t -- -- -I%S/Inputs
+// RUN: %check_clang_tidy -std=c++11,c++14 %s abseil-time-subtraction %t -- -- -I %S/Inputs
+// FIXME: Fix the checker to work in C++17 mode.
#include "absl/time/time.h"
-// RUN: %check_clang_tidy %s abseil-upgrade-duration-conversions %t -- -- -I%S/Inputs
+// RUN: %check_clang_tidy -std=c++11,c++14 %s abseil-upgrade-duration-conversions %t -- -- -I%S/Inputs
+// FIXME: Fix the checker to work in C++17 mode.
using int64_t = long long;
-// RUN: %check_clang_tidy %s bugprone-dangling-handle %t -- \
+// RUN: %check_clang_tidy -std=c++11,c++14 %s bugprone-dangling-handle %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: bugprone-dangling-handle.HandleClasses, \
-// RUN: value: 'std::basic_string_view; ::llvm::StringRef;'}]}" \
-// RUN: -- -std=c++11
+// RUN: value: 'std::basic_string_view; ::llvm::StringRef;'}]}"
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
-// RUN: %check_clang_tidy %s bugprone-exception-escape %t -- -extra-arg=-std=c++11 -extra-arg=-fexceptions -config="{CheckOptions: [{key: bugprone-exception-escape.IgnoredExceptions, value: 'ignored1,ignored2'}, {key: bugprone-exception-escape.FunctionsThatShouldNotThrow, value: 'enabled1,enabled2,enabled3'}]}" --
+// RUN: %check_clang_tidy -std=c++11,c++14 %s bugprone-exception-escape %t -- \
+// RUN: -config="{CheckOptions: [ \
+// RUN: {key: bugprone-exception-escape.IgnoredExceptions, value: 'ignored1,ignored2'}, \
+// RUN: {key: bugprone-exception-escape.FunctionsThatShouldNotThrow, value: 'enabled1,enabled2,enabled3'} \
+// RUN: ]}" \
+// RUN: -- -fexceptions
struct throwing_destructor {
~throwing_destructor() {
-// RUN: %check_clang_tidy %s bugprone-forwarding-reference-overload %t -- -- -std=c++14
+// RUN: %check_clang_tidy %s bugprone-forwarding-reference-overload %t
namespace std {
template <bool B, class T = void> struct enable_if { typedef T type; };
-// RUN: %check_clang_tidy %s bugprone-inaccurate-erase %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s bugprone-inaccurate-erase %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
template <typename T> struct vec_iterator {
-// RUN: %check_clang_tidy %s bugprone-move-forwarding-reference %t -- -- -std=c++14 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++14-or-later %s bugprone-move-forwarding-reference %t -- -- -fno-delayed-template-parsing
namespace std {
template <typename> struct remove_reference;
-// RUN: %check_clang_tidy %s bugprone-sizeof-container %t -- -- -std=c++11 -target x86_64-unknown-unknown
+// RUN: %check_clang_tidy %s bugprone-sizeof-container %t -- -- -target x86_64-unknown-unknown
namespace std {
-// RUN: %check_clang_tidy %s cert-err34-c %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s cert-err34-c %t
typedef void * FILE;
-// RUN: %check_clang_tidy %s cert-msc51-cpp %t -- -config="{CheckOptions: [{key: cert-msc51-cpp.DisallowedSeedTypes, value: 'some_type,time_t'}]}" -- -std=c++11
+// RUN: %check_clang_tidy %s cert-msc51-cpp %t -- \
+// RUN: -config="{CheckOptions: [{key: cert-msc51-cpp.DisallowedSeedTypes, value: 'some_type,time_t'}]}"
namespace std {
-// RUN: %check_clang_tidy %s cert-oop11-cpp %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s cert-oop11-cpp %t
struct B {
B(B&&) noexcept = default;
-// RUN: %check_clang_tidy %s cert-err52-cpp %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s cert-err52-cpp %t
typedef void *jmp_buf;
extern int __setjmpimpl(jmp_buf);
-// RUN: %check_clang_tidy %s cert-err60-cpp %t -- -- -std=c++11 -fcxx-exceptions
+// RUN: %check_clang_tidy -std=c++11,c++14 %s cert-err60-cpp %t -- -- -fcxx-exceptions
+// FIXME: Split off parts of this test that rely on dynamic exeption
+// specifications, and run this test in all language modes.
struct S {};
struct T : S {};
f.write(text)
f.truncate()
-def csv(string):
- return string.split(',')
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('-expect-clang-tidy-error', action='store_true')
- parser.add_argument('-resource-dir')
- parser.add_argument('-assume-filename')
- parser.add_argument('input_file_name')
- parser.add_argument('check_name')
- parser.add_argument('temp_file_name')
- parser.add_argument('-check-suffix', '-check-suffixes',
- default=[''], type=csv,
- help="comma-separated list of FileCheck suffixes")
-
- args, extra_args = parser.parse_known_args()
+def run_test_once(args, extra_args):
resource_dir = args.resource_dir
assume_file_name = args.assume_filename
input_file_name = args.input_file_name
check_name = args.check_name
temp_file_name = args.temp_file_name
expect_clang_tidy_error = args.expect_clang_tidy_error
+ std = args.std
file_name_with_extension = assume_file_name or input_file_name
_, extension = os.path.splitext(file_name_with_extension)
[arg.startswith('-format-style=') for arg in clang_tidy_extra_args]):
clang_tidy_extra_args.append('-format-style=none')
- if len(clang_extra_args) == 0:
- if extension in ['.cpp', '.hpp', '.mm']:
- clang_extra_args.append('--std=c++11')
- if extension in ['.m', '.mm']:
- clang_extra_args.extend(
- ['-fobjc-abi-version=2', '-fobjc-arc'])
+ if extension in ['.m', '.mm']:
+ clang_extra_args = ['-fobjc-abi-version=2', '-fobjc-arc'] + clang_extra_args
+
+ if extension in ['.cpp', '.hpp', '.mm']:
+ clang_extra_args.append('-std=' + std)
# Tests should not rely on STL being available, and instead provide mock
# implementations of relevant APIs.
print('FileCheck failed:\n' + e.output.decode())
raise
+
+def expand_std(std):
+ if std == 'c++98-or-later':
+ return ['c++98', 'c++11', 'c++14', 'c++17', 'c++2a']
+ if std == 'c++11-or-later':
+ return ['c++11', 'c++14', 'c++17', 'c++2a']
+ if std == 'c++14-or-later':
+ return ['c++14', 'c++17', 'c++2a']
+ if std == 'c++17-or-later':
+ return ['c++17', 'c++2a']
+ if std == 'c++2a-or-later':
+ return ['c++2a']
+ return [std]
+
+
+def csv(string):
+ return string.split(',')
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-expect-clang-tidy-error', action='store_true')
+ parser.add_argument('-resource-dir')
+ parser.add_argument('-assume-filename')
+ parser.add_argument('input_file_name')
+ parser.add_argument('check_name')
+ parser.add_argument('temp_file_name')
+ parser.add_argument(
+ '-check-suffix',
+ '-check-suffixes',
+ default=[''],
+ type=csv,
+ help='comma-separated list of FileCheck suffixes')
+ parser.add_argument('-std', type=csv, default=['c++11-or-later'])
+
+ args, extra_args = parser.parse_known_args()
+
+ abbreviated_stds = args.std
+ for abbreviated_std in abbreviated_stds:
+ for std in expand_std(abbreviated_std):
+ args.std = std
+ run_test_once(args, extra_args)
+
+
if __name__ == '__main__':
main()
// RUN: -config='{CheckOptions: \
// RUN: [{key: cppcoreguidelines-owning-memory.LegacyResourceProducers, value: "::malloc;::aligned_alloc;::realloc;::calloc;::fopen;::freopen;::tmpfile"}, \
// RUN: {key: cppcoreguidelines-owning-memory.LegacyResourceConsumers, value: "::free;::realloc;::freopen;::fclose"}]}' \
-// RUN: -- -std=c++11 -nostdlib -nostdinc++
+// RUN: -- -nostdlib -nostdinc++
namespace gsl {
template <class T>
-// RUN: clang-tidy %s -checks=-*,cppcoreguidelines-pro-bounds-constant-array-index -- -std=c++03 | count 0
+// RUN: %check_clang_tidy -std=c++98-or-later %s cppcoreguidelines-pro-bounds-constant-array-index %t
// Note: this test expects no diagnostics, but FileCheck cannot handle that,
// hence the use of | count 0.
int get() {
// The next line used to crash the check (in C++03 mode only).
return x[index];
+ // CHECK-FIXES: return x[index];
}
int x[3];
};
-// RUN: %check_clang_tidy %s cppcoreguidelines-pro-bounds-constant-array-index %t -- -config='{CheckOptions: [{key: cppcoreguidelines-pro-bounds-constant-array-index.GslHeader, value: "dir1/gslheader.h"}]}' -- -std=c++11
+// RUN: %check_clang_tidy %s cppcoreguidelines-pro-bounds-constant-array-index %t -- \
+// RUN: -config='{CheckOptions: [{key: cppcoreguidelines-pro-bounds-constant-array-index.GslHeader, value: "dir1/gslheader.h"}]}'
// CHECK-FIXES: #include "dir1/gslheader.h"
typedef __SIZE_TYPE__ size_t;
-// RUN: %check_clang_tidy %s cppcoreguidelines-pro-bounds-pointer-arithmetic %t -- -- -std=c++14
+// RUN: %check_clang_tidy -std=c++14-or-later %s cppcoreguidelines-pro-bounds-pointer-arithmetic %t
// Fix PR36489 and detect auto-deduced value correctly.
char *getPtr();
-// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init %t -- -- -std=c++2a -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++2a %s cppcoreguidelines-pro-type-member-init %t -- -- -fno-delayed-template-parsing
struct PositiveBitfieldMember {
PositiveBitfieldMember() {}
-// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init %t -- -- -std=c++98 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++98 %s cppcoreguidelines-pro-type-member-init %t -- -- -fno-delayed-template-parsing
struct PositiveFieldBeforeConstructor {
int F;
-// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init %t -- -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s cppcoreguidelines-pro-type-member-init %t -- -- -fno-delayed-template-parsing
+// FIXME: Fix the checker to work in C++2a mode.
struct PositiveFieldBeforeConstructor {
int F;
-// RUN: %check_clang_tidy %s cppcoreguidelines-special-member-functions %t -- -- -std=c++03
+// RUN: %check_clang_tidy -std=c++98 %s cppcoreguidelines-special-member-functions %t
class DefinesDestructor {
~DefinesDestructor();
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
-// RUN: %check_clang_tidy %s readability-identifier-naming %t/without-modules -- \
+// RUN: %check_clang_tidy -std=c++11 %s readability-identifier-naming %t/without-modules -- \
// RUN: -config="CheckOptions: [{ \
// RUN: key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE }]" \
// RUN: -header-filter=.* \
-// RUN: -- -x c++ -std=c++11 -I%t/
+// RUN: -- -I %t/
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+// RUN: %check_clang_tidy -std=c++17 %s readability-identifier-naming %t/without-modules -- \
+// RUN: -config="CheckOptions: [{ \
+// RUN: key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE }]" \
+// RUN: -header-filter=.* \
+// RUN: -- -I %t/
//
// Run clang-tidy on a file with modular includes:
//
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
-// RUN: %check_clang_tidy %s readability-identifier-naming %t/with-modules -- \
+// RUN: %check_clang_tidy -std=c++11 %s readability-identifier-naming %t/with-modules -- \
+// RUN: -config="CheckOptions: [{ \
+// RUN: key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE }]" \
+// RUN: -header-filter=.* \
+// RUN: -- -I %t/ \
+// RUN: -fmodules -fimplicit-modules -fno-implicit-module-maps \
+// RUN: -fmodule-map-file=%t/module.modulemap \
+// RUN: -fmodules-cache-path=%t/module-cache/
+//
+// RUN: rm -rf %t
+// RUN: mkdir %t
+// RUN: cp %S/Inputs/expand-modular-headers-ppcallbacks/* %t/
+// RUN: %check_clang_tidy -std=c++17 %s readability-identifier-naming %t/with-modules -- \
// RUN: -config="CheckOptions: [{ \
// RUN: key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE }]" \
// RUN: -header-filter=.* \
-// RUN: -- -x c++ -std=c++11 -I%t/ \
+// RUN: -- -I %t/ \
// RUN: -fmodules -fimplicit-modules -fno-implicit-module-maps \
// RUN: -fmodule-map-file=%t/module.modulemap \
// RUN: -fmodules-cache-path=%t/module-cache/
+// FIXME: Make the test work in all language modes.
#include "c.h"
// CHECK-MESSAGES: a.h:1:9: warning: invalid case style for macro definition 'a' [readability-identifier-naming]
// RUN: %check_clang_tidy %s fuchsia-restrict-system-includes %t \
-// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: ''}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
+// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: ''}]}" \
+// RUN: -- -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
#include <cstdlib.h>
// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: system include cstdlib.h not allowed
// RUN: %check_clang_tidy %s fuchsia-restrict-system-includes %t \
-// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 'cstd*'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
+// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 'cstd*'}]}" \
+// RUN: -- -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
#include <cstdlib.h>
#include <cstdarg.h>
// RUN: rm -rf %T/Headers
// RUN: mkdir %T/Headers
// RUN: cp -r %S/Inputs/fuchsia-restrict-system-includes %T/Headers/fuchsia-restrict-system-includes
-// RUN: %check_clang_tidy %s fuchsia-restrict-system-includes %t \
-// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 'transitive.h,s.h'}]}" \
+// RUN: %check_clang_tidy -std=c++11 %s fuchsia-restrict-system-includes %t \
+// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 'transitive.h,s.h'}]}" \
// RUN: -system-headers -header-filter=.* \
-// RUN: -- -std=c++11 -I %T/Headers/fuchsia-restrict-system-includes -isystem %T/Headers/fuchsia-restrict-system-includes/system
+// RUN: -- -I %T/Headers/fuchsia-restrict-system-includes -isystem %T/Headers/fuchsia-restrict-system-includes/system
// RUN: FileCheck -input-file=%T/Headers/fuchsia-restrict-system-includes/transitive2.h %s -check-prefix=CHECK-FIXES
// RUN: rm -rf %T/Headers
+// FIXME: Make the test work in all language modes.
// transitive.h includes <r.h> and <t.h>
#include <transitive.h>
// RUN: %check_clang_tidy %s fuchsia-restrict-system-includes %t \
-// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 's.h'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
+// RUN: -- -config="{CheckOptions: [{key: fuchsia-restrict-system-includes.Includes, value: 's.h'}]}" \
+// RUN: -- -I %S/Inputs/fuchsia-restrict-system-includes -isystem %S/Inputs/fuchsia-restrict-system-includes/system
#include "a.h"
-// RUN: %check_clang_tidy %s google-readability-casting %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s google-readability-casting %t
+// FIXME: Fix the checker to work in C++17 mode.
bool g() { return false; }
// RUN: {key: google-runtime-int.UnsignedTypePrefix, value: "std::uint"}, \
// RUN: {key: google-runtime-int.SignedTypePrefix, value: "std::int"}, \
// RUN: {key: google-runtime-int.TypeSuffix, value: "_t"}, \
-// RUN: ]}' -- -std=c++11
+// RUN: ]}'
long a();
// CHECK-MESSAGES: [[@LINE-1]]:1: warning: consider replacing 'long' with 'std::int{{..}}_t'
// RUN: %check_clang_tidy %s google-runtime-references %t -- \
-// RUN: -extra-arg="-std=c++11" \
// RUN: -config="{CheckOptions: \
// RUN: [{key: google-runtime-references.WhiteListTypes, \
-// RUN: value: 'whitelist::A; whitelist::B'}]}" --
+// RUN: value: 'whitelist::A; whitelist::B'}]}"
int a;
int &b = a;
// RUN: clang-tidy %s -checks='-*,hicpp-signed-bitwise' -- -std=c++11
+// FIXME: Make the test work in all language modes.
#include "hicpp-signed-bitwise-standard-types.h"
-// RUN: %check_clang_tidy %s hicpp-signed-bitwise %t -- -- -std=c++11 --target=x86_64-linux
+// RUN: %check_clang_tidy %s hicpp-signed-bitwise %t -- -- --target=x86_64-linux
// These could cause false positives and should not be considered.
struct StreamClass {
-// RUN: %check_clang_tidy %s misc-new-delete-overloads %t -- -- -std=c++14 -fsized-deallocation
+// RUN: %check_clang_tidy %s misc-new-delete-overloads %t -- -- -fsized-deallocation
typedef decltype(sizeof(int)) size_t;
-// RUN: %check_clang_tidy %s misc-new-delete-overloads %t -- -- -std=c++14
+// RUN: %check_clang_tidy %s misc-new-delete-overloads %t
typedef decltype(sizeof(int)) size_t;
-// RUN: %check_clang_tidy %s misc-redundant-expression %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s misc-redundant-expression %t
typedef __INT64_TYPE__ I64;
-// RUN: %check_clang_tidy %s misc-throw-by-value-catch-by-reference %t -- -- -std=c++11 -fcxx-exceptions
+// RUN: %check_clang_tidy %s misc-throw-by-value-catch-by-reference %t -- -- -fcxx-exceptions
class logic_error {
-// RUN: %check_clang_tidy %s misc-unconventional-assign-operator %t -- -- -std=c++17 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++14-or-later %s misc-unconventional-assign-operator %t -- -- -fno-delayed-template-parsing
struct BadModifier {
BadModifier& operator=(const BadModifier&) const;
-// RUN: %check_clang_tidy %s misc-unconventional-assign-operator %t -- -- -std=c++11 -isystem %S/Inputs/Headers -fno-delayed-template-parsing
+// RUN: %check_clang_tidy %s misc-unconventional-assign-operator %t -- -- -isystem %S/Inputs/Headers -fno-delayed-template-parsing
namespace std {
template <typename T>
// RUN: echo "static void staticFunctionHeader(int i) {;}" > %T/header.h
// RUN: echo "static void staticFunctionHeader(int /*i*/) {;}" > %T/header-fixed.h
-// RUN: %check_clang_tidy %s misc-unused-parameters %t -- -header-filter='.*' -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++11 %s misc-unused-parameters %t -- -header-filter='.*' -- -fno-delayed-template-parsing
// RUN: diff %T/header.h %T/header-fixed.h
+// FIXME: Make the test work in all language modes.
#include "header.h"
// CHECK-MESSAGES: header.h:1:38: warning
-// RUN: %check_clang_tidy %s modernize-avoid-bind %t -- -- -std=c++14
+// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-avoid-bind %t
namespace std {
inline namespace impl {
-// RUN: %check_clang_tidy %s modernize-concat-nested-namespaces %t -- -- -std=c++17
+// RUN: %check_clang_tidy -std=c++17-or-later %s modernize-concat-nested-namespaces %t
namespace n1 {}
-// RUN: %check_clang_tidy %s modernize-deprecated-headers %t -- -extra-arg-before=-isystem%S/Inputs/modernize-deprecated-headers -- -std=c++03 -v
+// RUN: %check_clang_tidy -std=c++98 %s modernize-deprecated-headers %t -- -extra-arg-before=-isystem%S/Inputs/modernize-deprecated-headers
#include <assert.h>
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
-// RUN: %check_clang_tidy %s modernize-deprecated-headers %t -- -extra-arg-before=-isystem%S/Inputs/modernize-deprecated-headers -- -std=c++11 -v
+// RUN: %check_clang_tidy -std=c++11-or-later %s modernize-deprecated-headers %t -- -extra-arg-before=-isystem%S/Inputs/modernize-deprecated-headers
#include <assert.h>
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: inclusion of deprecated C++ header 'assert.h'; consider using 'cassert' instead [modernize-deprecated-headers]
-// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
// RUN: %check_clang_tidy %s modernize-loop-convert %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-loop-convert.NamingStyle, value: 'camelBack'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
-// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s modernize-loop-convert %t
struct Str {
Str() = default;
-// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
// RUN: %check_clang_tidy %s modernize-loop-convert %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-loop-convert.NamingStyle, value: 'lower_case'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
-// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: %check_clang_tidy %s modernize-loop-convert %t -- -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
// RUN: %check_clang_tidy %s modernize-loop-convert %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-loop-convert.NamingStyle, value: 'UPPER_CASE'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/modernize-loop-convert
+// RUN: -- -I %S/Inputs/modernize-loop-convert
#include "structures.h"
// RUN: {key: modernize-make-shared.MakeSmartPtrFunctionHeader, \
// RUN: value: 'make_shared_util.h'} \
// RUN: ]}" \
-// RUN: -- -std=c++11 -I%S/Inputs/modernize-smart-ptr
+// RUN: -- -I %S/Inputs/modernize-smart-ptr
#include "shared_ptr.h"
// CHECK-FIXES: #include "make_shared_util.h"
-// RUN: %check_clang_tidy %s modernize-make-shared %t -- -- -std=c++11 \
-// RUN: -I%S/Inputs/modernize-smart-ptr
+// RUN: %check_clang_tidy %s modernize-make-shared %t -- -- -I %S/Inputs/modernize-smart-ptr
#include "shared_ptr.h"
// CHECK-FIXES: #include <memory>
-// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++11 \
-// RUN: -I%S/Inputs/modernize-smart-ptr
+// RUN: %check_clang_tidy -std=c++11 %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr
#include "unique_ptr.h"
// CHECK-FIXES: #include "unique_ptr.h"
-// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++14 \
-// RUN: -I%S/Inputs/modernize-smart-ptr
+// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr
#include "unique_ptr.h"
// CHECK-FIXES: #include <memory>
// RUN: {key: modernize-make-unique.MakeSmartPtrFunctionHeader, \
// RUN: value: 'make_unique_util.h'} \
// RUN: ]}" \
-// RUN: -- -std=c++11 -I%S/Inputs/modernize-smart-ptr
+// RUN: -- -I %S/Inputs/modernize-smart-ptr
#include "unique_ptr.h"
// CHECK-FIXES: #include "make_unique_util.h"
-// RUN: %check_clang_tidy %s modernize-make-unique %t -- \
+// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-make-unique %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-make-unique.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++14 -I%S/Inputs/modernize-smart-ptr
+// RUN: -- -I %S/Inputs/modernize-smart-ptr
#include "unique_ptr.h"
-// RUN: %check_clang_tidy %s modernize-make-unique %t -- -- -std=c++14 \
-// RUN: -I%S/Inputs/modernize-smart-ptr
+// RUN: %check_clang_tidy -std=c++14 %s modernize-make-unique %t -- -- -I %S/Inputs/modernize-smart-ptr
+// FIXME: Fix the checker to work in C++17 mode.
#include "unique_ptr.h"
#include "initializer_list.h"
// RUN: cp %S/Inputs/modernize-pass-by-value/header.h %T/pass-by-value-header.h
// RUN: clang-tidy %s -checks='-*,modernize-pass-by-value' -header-filter='.*' -fix -- -std=c++11 -I %T | FileCheck %s -check-prefix=CHECK-MESSAGES -implicit-check-not="{{warning|error}}:"
// RUN: FileCheck -input-file=%T/pass-by-value-header.h %s -check-prefix=CHECK-FIXES
+// FIXME: Make the test work in all language modes.
#include "pass-by-value-header.h"
// CHECK-MESSAGES: :8:5: warning: pass by value and use std::move [modernize-pass-by-value]
-// RUN: %check_clang_tidy %s modernize-pass-by-value %t -- -- -std=c++11 -isystem %S/Inputs/Headers
+// RUN: %check_clang_tidy %s modernize-pass-by-value %t -- -- -isystem %S/Inputs/Headers
// CHECK-FIXES: #include <utility>
-// RUN: %check_clang_tidy %s modernize-pass-by-value %t -- -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy %s modernize-pass-by-value %t -- -- -fno-delayed-template-parsing
namespace {
// POD types are trivially move constructible.
-// RUN: %check_clang_tidy %s modernize-raw-string-literal %t -- -config='{CheckOptions: [{key: "modernize-raw-string-literal.DelimiterStem", value: "str"}, {key: modernize-raw-string-literal.ReplaceShorterLiterals, value: 1}]}' -- -std=c++11
+// RUN: %check_clang_tidy %s modernize-raw-string-literal %t -- -config='{CheckOptions: [{key: "modernize-raw-string-literal.DelimiterStem", value: "str"}, {key: modernize-raw-string-literal.ReplaceShorterLiterals, value: 1}]}'
char const *const ContainsSentinel{"who\\ops)\""};
// CHECK-MESSAGES: :[[@LINE-1]]:36: warning: {{.*}} can be written as a raw string literal
-// RUN: %check_clang_tidy %s modernize-raw-string-literal %t -- -config="{CheckOptions: [{key: modernize-raw-string-literal.ReplaceShorterLiterals, value: 1}]}" -- -std=c++11
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s modernize-raw-string-literal %t -- -config="{CheckOptions: [{key: modernize-raw-string-literal.ReplaceShorterLiterals, value: 1}]}"
+// FIXME: Fix the checker to work in C++2a mode.
char const *const BackSlash("goink\\frob");
// CHECK-MESSAGES: :[[@LINE-1]]:29: warning: escaped string literal can be written as a raw string literal [modernize-raw-string-literal]
-// RUN: %check_clang_tidy %s modernize-replace-auto-ptr %t -- -- \
-// RUN: -std=c++11 -I %S/Inputs/modernize-replace-auto-ptr
+// RUN: %check_clang_tidy %s modernize-replace-auto-ptr %t -- -- -I %S/Inputs/modernize-replace-auto-ptr
// CHECK-FIXES: #include <utility>
-// RUN: %check_clang_tidy %s modernize-replace-random-shuffle %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s modernize-replace-random-shuffle %t
//CHECK-FIXES: #include <random>
-// RUN: %check_clang_tidy %s modernize-return-braced-init-list %t -- -- -std=c++14
+// RUN: %check_clang_tidy -std=c++14 %s modernize-return-braced-init-list %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
typedef decltype(sizeof(int)) size_t;
-// RUN: %check_clang_tidy %s modernize-unary-static-assert %t -- -- -std=c++1z
+// RUN: %check_clang_tidy -std=c++17-or-later %s modernize-unary-static-assert %t
#define FOO static_assert(sizeof(a) <= 15, "");
#define MSG ""
// RUN: %check_clang_tidy %s modernize-use-auto %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: '1'} , {key: modernize-use-auto.MinTypeNameLength, value: '0'}]}" \
-// RUN: -- -std=c++11 -frtti
+// RUN: -- -frtti
struct A {
virtual ~A() {}
// RUN: %check_clang_tidy %s modernize-use-auto %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-auto.MinTypeNameLength, value: '0'}]}" \
-// RUN: -- -std=c++11 -I %S/Inputs/modernize-use-auto -frtti
+// RUN: -- -I %S/Inputs/modernize-use-auto -frtti
struct A {
virtual ~A() {}
-// RUN: %check_clang_tidy %s modernize-use-auto %t -- -- \
-// RUN: -std=c++11 -I %S/Inputs/modernize-use-auto
+// RUN: %check_clang_tidy -std=c++11,c++14 %s modernize-use-auto %t -- -- -I %S/Inputs/modernize-use-auto
+// FIXME: Fix the checker to work in C++17 mode.
#include "containers.h"
-// RUN: %check_clang_tidy -check-suffix=0-0 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 0}, {key: modernize-use-auto.MinTypeNameLength, value: 0}]}" -- --std=c++11 -frtti
-// RUN: %check_clang_tidy -check-suffix=0-8 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 0}, {key: modernize-use-auto.MinTypeNameLength, value: 8}]}" -- --std=c++11 -frtti
-// RUN: %check_clang_tidy -check-suffix=1-0 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 1}, {key: modernize-use-auto.MinTypeNameLength, value: 0}]}" -- --std=c++11 -frtti
-// RUN: %check_clang_tidy -check-suffix=1-8 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 1}, {key: modernize-use-auto.MinTypeNameLength, value: 8}]}" -- --std=c++11 -frtti
+// RUN: %check_clang_tidy -check-suffix=0-0 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 0}, {key: modernize-use-auto.MinTypeNameLength, value: 0}]}" -- -frtti
+// RUN: %check_clang_tidy -check-suffix=0-8 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 0}, {key: modernize-use-auto.MinTypeNameLength, value: 8}]}" -- -frtti
+// RUN: %check_clang_tidy -check-suffix=1-0 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 1}, {key: modernize-use-auto.MinTypeNameLength, value: 0}]}" -- -frtti
+// RUN: %check_clang_tidy -check-suffix=1-8 %s modernize-use-auto %t -- -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: 1}, {key: modernize-use-auto.MinTypeNameLength, value: 8}]}" -- -frtti
template <class T> extern T foo();
template <class T> struct P { explicit P(T t) : t_(t) {} T t_;};
// RUN: %check_clang_tidy %s modernize-use-auto %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: '1'}, {key: modernize-use-auto.MinTypeNameLength, value: '0'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-auto.RemoveStars, value: '1'}, {key: modernize-use-auto.MinTypeNameLength, value: '0'}]}"
class MyType {};
// RUN: %check_clang_tidy %s modernize-use-auto %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-auto.MinTypeNameLength, value: '0'}]}" \
-// RUN: -- -std=c++11 -frtti
+// RUN: -- -frtti
class MyType {};
// RUN: %check_clang_tidy %s modernize-use-bool-literals %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: modernize-use-bool-literals.IgnoreMacros, \
-// RUN: value: 1}]}" \
-// RUN: -- -std=c++11
+// RUN: value: 1}]}"
bool IntToTrue = 1;
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: converting integer literal to bool, use bool literal instead [modernize-use-bool-literals]
// RUN: %check_clang_tidy %s modernize-use-bool-literals %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: modernize-use-bool-literals.IgnoreMacros, \
-// RUN: value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: value: 0}]}"
bool IntToTrue = 1;
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: converting integer literal to bool, use bool literal instead [modernize-use-bool-literals]
// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-default-member-init.UseAssignment, value: 1}]}" -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-default-member-init.UseAssignment, value: 1}]}"
struct S {
};
-// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- -- -std=c++2a
+// RUN: %check_clang_tidy -std=c++2a-or-later %s modernize-use-default-member-init %t
struct PositiveBitField
{
// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-default-member-init.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-default-member-init.IgnoreMacros, value: 0}]}"
#define MACRO() \
struct S { \
-// RUN: %check_clang_tidy %s modernize-use-default-member-init %t -- -- -std=c++11
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s modernize-use-default-member-init %t
+// FIXME: Fix the checker to work in C++2a mode.
struct S {
};
// RUN: -config="{CheckOptions: \
// RUN: [{key: modernize-use-emplace.IgnoreImplicitConstructors, \
// RUN: value: 1}] \
-// RUN: }" -- -std=c++11
+// RUN: }"
namespace std {
template <typename>
// RUN: value: '::std::pair; std::tuple; ::test::Single'}, \
// RUN: {key: modernize-use-emplace.TupleMakeFunctions, \
// RUN: value: '::std::make_pair; ::std::make_tuple; ::test::MakeSingle'}] \
-// RUN: }" -- -std=c++11
+// RUN: }"
namespace std {
template <typename>
// RUN: %check_clang_tidy %s modernize-use-equals-default %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-equals-default.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11 -fno-delayed-template-parsing -fexceptions
+// RUN: -- -fno-delayed-template-parsing -fexceptions
// Out of line definition.
struct OL {
// RUN: clang-tidy %s -checks=-*,modernize-use-equals-default -- -std=c++11 -fdelayed-template-parsing -fexceptions | count 0
// Note: this test expects no diagnostics, but FileCheck cannot handle that,
// hence the use of | count 0.
+// FIXME: Make the test work in all language modes.
template <typename Ty>
struct S {
// RUN: %check_clang_tidy %s modernize-use-equals-default %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-equals-default.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-equals-default.IgnoreMacros, value: 0}]}"
#define STRUCT_WITH_DEFAULT(_base, _type) \
struct _type { \
-// RUN: %check_clang_tidy %s modernize-use-equals-default %t -- -- -std=c++11 -fno-delayed-template-parsing -fexceptions
+// RUN: %check_clang_tidy %s modernize-use-equals-default %t -- -- -fno-delayed-template-parsing -fexceptions
// Out of line definition.
class OL {
// RUN: %check_clang_tidy %s modernize-use-equals-delete %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-equals-delete.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-equals-delete.IgnoreMacros, value: 0}]}"
#define MACRO(type) void operator=(type const &)
class C {
// RUN: %check_clang_tidy %s modernize-use-nodiscard %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '[[clang::warn_unused_result]]'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '[[clang::warn_unused_result]]'}]}"
class Foo
{
// RUN: %check_clang_tidy %s modernize-use-nodiscard %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '__attribute__((warn_unused_result))'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '__attribute__((warn_unused_result))'}]}"
class Foo
{
// RUN: %check_clang_tidy %s modernize-use-nodiscard %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '[[gcc::warn_unused_result]]'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: '[[gcc::warn_unused_result]]'}]}"
class Foo
{
// RUN: %check_clang_tidy %s modernize-use-nodiscard %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: 'CUSTOM_NO_DISCARD'}]}" -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-nodiscard.ReplacementString, value: 'CUSTOM_NO_DISCARD'}]}"
// As if the macro was not defined.
// #define CUSTOM_NO_DISCARD __attribute_((warn_unused_result))
-// RUN: %check_clang_tidy %s modernize-use-nodiscard %t -- -- -std=c++17
+// RUN: %check_clang_tidy -std=c++17-or-later %s modernize-use-nodiscard %t
class Foo
{
-// RUN: %check_clang_tidy %s modernize-use-noexcept %t -- \
+// RUN: %check_clang_tidy -std=c++11,c++14 %s modernize-use-noexcept %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-noexcept.ReplacementString, value: 'NOEXCEPT'}]}" \
-// RUN: -- -std=c++11 -fexceptions
+// RUN: -- -fexceptions
+// This test is not run in C++17 or later because dynamic exception
+// specifications were removed in C++17.
// Example definition of NOEXCEPT -- simplified test to see if noexcept is supported.
#if (__has_feature(cxx_noexcept))
-// RUN: %check_clang_tidy %s modernize-use-noexcept %t -- \
+// RUN: %check_clang_tidy -std=c++11,c++14 %s modernize-use-noexcept %t -- \
// RUN: -config="{CheckOptions: [{key: modernize-use-noexcept.UseNoexceptFalse, value: 0}]}" \
-// RUN: -- -std=c++11 -fexceptions
+// RUN: -- -fexceptions
+// This test is not run in C++17 or later because dynamic exception
+// specifications were removed in C++17.
class A {};
class B {};
-// RUN: %check_clang_tidy %s modernize-use-noexcept %t -- \
-// RUN: -- -std=c++11 -fexceptions
+// RUN: %check_clang_tidy -std=c++11,c++14 %s modernize-use-noexcept %t -- -- -fexceptions
+// This test is not run in C++17 or later because dynamic exception
+// specifications were removed in C++17.
class A {};
class B {};
-// RUN: %check_clang_tidy %s modernize-use-nullptr %t -- -- \
-// RUN: -std=c++98 -Wno-non-literal-null-conversion
+// RUN: %check_clang_tidy -std=c++98 %s modernize-use-nullptr %t -- -- -Wno-non-literal-null-conversion
//
// Some parts of the test (e.g. assignment of `const int` to `int *`) fail in
// C++11, so we need to run the test in C++98 mode.
+//
+// FIXME: Make the test work in all language modes.
const unsigned int g_null = 0;
#define NULL 0
// RUN: %check_clang_tidy %s modernize-use-nullptr %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-nullptr.NullMacros, value: 'MY_NULL,NULL'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-nullptr.NullMacros, value: 'MY_NULL,NULL'}]}"
#define NULL 0
-// RUN: %check_clang_tidy %s modernize-use-override %t -- -- -std=c++98
+// RUN: %check_clang_tidy -std=c++98 %s modernize-use-override %t
struct Base {
virtual ~Base() {}
-// RUN: %check_clang_tidy %s modernize-use-override %t -- -- -fms-extensions -std=c++11
+// RUN: %check_clang_tidy %s modernize-use-override %t -- -- -fms-extensions
// This test is designed to test ms-extension __declspec(dllexport) attributes.
#define EXPORT __declspec(dllexport)
// RUN: %check_clang_tidy %s modernize-use-override %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-override.IgnoreDestructors, value: 1}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-override.IgnoreDestructors, value: 1}]}"
struct Base {
virtual ~Base();
// RUN: %check_clang_tidy %s modernize-use-override %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-override.OverrideSpelling, value: 'OVERRIDE'},{key: modernize-use-override.FinalSpelling, value: 'FINAL'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-override.OverrideSpelling, value: 'OVERRIDE'},{key: modernize-use-override.FinalSpelling, value: 'FINAL'}]}"
#define ABSTRACT = 0
// RUN: %check_clang_tidy %s modernize-use-override %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-override.OverrideSpelling, value: 'CUSTOM_OVERRIDE'},{key: modernize-use-override.FinalSpelling, value: 'CUSTOM_FINAL'}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-override.OverrideSpelling, value: 'CUSTOM_OVERRIDE'},{key: modernize-use-override.FinalSpelling, value: 'CUSTOM_FINAL'}]}"
// As if the macro was not defined.
//#define CUSTOM_OVERRIDE override
-// RUN: %check_clang_tidy %s modernize-use-override %t -- -- -std=c++11 -fexceptions
+// RUN: %check_clang_tidy %s modernize-use-override %t -- -- -fexceptions
#define ABSTRACT = 0
-// RUN: %check_clang_tidy %s modernize-use-trailing-return-type %t -- -- --std=c++14 -fdeclspec -fexceptions
+// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-use-trailing-return-type %t -- -- -fdeclspec -fexceptions
namespace std {
template <typename T>
-// RUN: %check_clang_tidy %s modernize-use-transparent-functors %t -- -- -std=c++14
+// RUN: %check_clang_tidy -std=c++14-or-later %s modernize-use-transparent-functors %t
namespace std {
template<class T>
-// RUN: %check_clang_tidy %s modernize-use-uncaught-exceptions %t -- -- -std=c++1z
+// RUN: %check_clang_tidy -std=c++17-or-later %s modernize-use-uncaught-exceptions %t
+
#define MACRO std::uncaught_exception
// CHECK-FIXES: #define MACRO std::uncaught_exception
// RUN: %check_clang_tidy %s modernize-use-using %t -- \
-// RUN: -config="{CheckOptions: [{key: modernize-use-using.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: modernize-use-using.IgnoreMacros, value: 0}]}"
#define CODE typedef int INT
-// RUN: %check_clang_tidy %s bugprone-suspicious-semicolon %t -- -- -fno-objc-arc -fobjc-abi-version=1
+// RUN: %check_clang_tidy -std=c99 %s bugprone-suspicious-semicolon %t -- -- -fno-objc-arc -fobjc-abi-version=1
// This test ensures check_clang_tidy.py allows disabling Objective-C ARC and
// Objective-C 2.0 via passing arguments after -- on the command line.
-// RUN: %check_clang_tidy %s openmp-use-default-none %t -- -- -x c++ -fopenmp=libomp -fopenmp-version=40
-// RUN: %check_clang_tidy %s openmp-use-default-none %t -- -- -x c -fopenmp=libomp -fopenmp-version=40
+// RUN: %check_clang_tidy %s openmp-use-default-none %t -- -- -fopenmp=libomp -fopenmp-version=40
+// RUN: %check_clang_tidy -std=c11 %s openmp-use-default-none %t -- -- -x c -fopenmp=libomp -fopenmp-version=40
//----------------------------------------------------------------------------//
// Null cases.
-// RUN: %check_clang_tidy %s performance-for-range-copy %t -- -config="{CheckOptions: [{key: performance-for-range-copy.AllowedTypes, value: '[Pp]ointer$;[Pp]tr$;[Rr]ef(erence)?$'}]}" -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy %s performance-for-range-copy %t -- \
+// RUN: -config="{CheckOptions: [{key: performance-for-range-copy.AllowedTypes, value: '[Pp]ointer$;[Pp]tr$;[Rr]ef(erence)?$'}]}" \
+// RUN: -- -fno-delayed-template-parsing
template <typename T>
struct Iterator {
-// RUN: %check_clang_tidy %s performance-for-range-copy %t -config="{CheckOptions: [{key: "performance-for-range-copy.WarnOnAllAutoCopies", value: 1}]}" -- -std=c++11
+// RUN: %check_clang_tidy %s performance-for-range-copy %t -- \
+// RUN: -config="{CheckOptions: [{key: "performance-for-range-copy.WarnOnAllAutoCopies", value: 1}]}"
template <typename T>
struct Iterator {
-// RUN: %check_clang_tidy %s performance-for-range-copy %t -- -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy %s performance-for-range-copy %t -- -- -fno-delayed-template-parsing
namespace std {
-// RUN: %check_clang_tidy %s performance-inefficient-algorithm %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s performance-inefficient-algorithm %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
template <typename T> struct less {
-// RUN: %check_clang_tidy %s performance-inefficient-vector-operation %t -- -format-style=llvm -- --std=c++11
+// RUN: %check_clang_tidy %s performance-inefficient-vector-operation %t -- -format-style=llvm
namespace std {
// RUN: %check_clang_tidy %s performance-move-const-arg %t \
// RUN: -config='{CheckOptions: \
-// RUN: [{key: performance-move-const-arg.CheckTriviallyCopyableMove, value: 0}]}' \
-// RUN: -- -std=c++14
+// RUN: [{key: performance-move-const-arg.CheckTriviallyCopyableMove, value: 0}]}'
namespace std {
// RUN: %check_clang_tidy %s performance-move-constructor-init,modernize-pass-by-value %t -- \
// RUN: -config='{CheckOptions: \
// RUN: [{key: modernize-pass-by-value.ValuesOnly, value: 1}]}' \
-// RUN: -- -std=c++11 -isystem %S/Inputs/Headers
+// RUN: -- -isystem %S/Inputs/Headers
#include <s.h>
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: cp %S/Inputs/performance-unnecessary-value-param/header.h %t/header.h
-// RUN: %check_clang_tidy %s performance-unnecessary-value-param %t/temp -- -- -std=c++11 -I %t
+// RUN: %check_clang_tidy -std=c++11 %s performance-unnecessary-value-param %t/temp -- -- -I %t
// RUN: diff %t/header.h %S/Inputs/performance-unnecessary-value-param/header-fixed.h
+// FIXME: Make the test work in all language modes.
#include "header.h"
-// RUN: %check_clang_tidy %s performance-unnecessary-value-param %t -- -fix-errors -- --std=c++11
+// RUN: %check_clang_tidy %s performance-unnecessary-value-param %t -- -fix-errors
// Ensure that incomplete types result in an error from the frontend and not a
// clang-tidy diagnostic about IncompleteType being expensive to copy.
-// RUN: %check_clang_tidy %s portability-simd-intrinsics %t -- \
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s portability-simd-intrinsics %t -- \
// RUN: -config='{CheckOptions: [ \
// RUN: {key: portability-simd-intrinsics.Suggest, value: 1} \
-// RUN: ]}' -- -target ppc64le -maltivec -std=c++11
+// RUN: ]}' -- -target ppc64le -maltivec
+// FIXME: Fix the checker to work in C++2a mode.
vector int vec_add(vector int, vector int);
-// RUN: %check_clang_tidy %s portability-simd-intrinsics %t -- \
+// RUN: %check_clang_tidy -std=c++11,c++14,c++17 %s portability-simd-intrinsics %t -- \
// RUN: -config='{CheckOptions: [ \
// RUN: {key: portability-simd-intrinsics.Suggest, value: 1} \
-// RUN: ]}' -- -target x86_64 -std=c++11
+// RUN: ]}' -- -target x86_64
+// FIXME: Fix the checker to work in C++2a mode.
typedef long long __m128i __attribute__((vector_size(16)));
typedef double __m256 __attribute__((vector_size(32)));
-// RUN: %check_clang_tidy %s readability-deleted-default %t -- -- -std=c++11 -fno-ms-compatibility
+// RUN: %check_clang_tidy %s readability-deleted-default %t -- -- -fno-ms-compatibility
class NoDefault {
public:
-// RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -std=c++11 -fexceptions
+// RUN: %check_clang_tidy %s readability-else-after-return %t -- -- -fexceptions
namespace std {
struct string {
-// RUN: %check_clang_tidy %s readability-function-size %t -- -config='{CheckOptions: [{key: readability-function-size.LineThreshold, value: 0}, {key: readability-function-size.StatementThreshold, value: 0}, {key: readability-function-size.BranchThreshold, value: 0}, {key: readability-function-size.ParameterThreshold, value: 5}, {key: readability-function-size.NestingThreshold, value: 2}, {key: readability-function-size.VariableThreshold, value: 1}]}' -- -std=c++11
+// RUN: %check_clang_tidy %s readability-function-size %t -- \
+// RUN: -config='{CheckOptions: [ \
+// RUN: {key: readability-function-size.LineThreshold, value: 0}, \
+// RUN: {key: readability-function-size.StatementThreshold, value: 0}, \
+// RUN: {key: readability-function-size.BranchThreshold, value: 0}, \
+// RUN: {key: readability-function-size.ParameterThreshold, value: 5}, \
+// RUN: {key: readability-function-size.NestingThreshold, value: 2}, \
+// RUN: {key: readability-function-size.VariableThreshold, value: 1} \
+// RUN: ]}'
// Bad formatting is intentional, don't run clang-format over the whole file!
// RUN: {key: readability-identifier-naming.LocalPointerPrefix, value: 'l_'}, \
// RUN: {key: readability-identifier-naming.LocalConstantPointerCase, value: CamelCase}, \
// RUN: {key: readability-identifier-naming.LocalConstantPointerPrefix, value: 'lc_'}, \
-// RUN: ]}' -- -std=c++11 -fno-delayed-template-parsing \
+// RUN: ]}' -- -fno-delayed-template-parsing \
// RUN: -I%S/Inputs/readability-identifier-naming \
// RUN: -isystem %S/Inputs/readability-identifier-naming/system
// RUN: %check_clang_tidy %s readability-implicit-bool-conversion %t \
// RUN: -config='{CheckOptions: \
// RUN: [{key: readability-implicit-bool-conversion.AllowIntegerConditions, value: 1}, \
-// RUN: {key: readability-implicit-bool-conversion.AllowPointerConditions, value: 1}]}' \
-// RUN: -- -std=c++11
+// RUN: {key: readability-implicit-bool-conversion.AllowPointerConditions, value: 1}]}'
template<typename T>
void functionTaking(T);
-// RUN: %check_clang_tidy %s readability-implicit-bool-conversion %t -- -- -std=c++98
+// RUN: %check_clang_tidy -std=c++98 %s readability-implicit-bool-conversion %t
// We need NULL macro, but some buildbots don't like including <cstddef> header
// This is a portable way of getting it to work
// RUN: %check_clang_tidy %s readability-inconsistent-declaration-parameter-name %t -- \
-// RUN: -config="{CheckOptions: [{key: readability-inconsistent-declaration-parameter-name.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: readability-inconsistent-declaration-parameter-name.IgnoreMacros, value: 0}]}"
#define MACRO() \
void f(int x)
// RUN: %check_clang_tidy %s readability-inconsistent-declaration-parameter-name %t -- \
-// RUN: -config="{CheckOptions: [{key: readability-inconsistent-declaration-parameter-name.Strict, value: 1}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: readability-inconsistent-declaration-parameter-name.Strict, value: 1}]}"
void inconsistentFunction(int a, int b, int c);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: function 'inconsistentFunction' has 1 other declaration with different parameter names
-// RUN: %check_clang_tidy %s readability-inconsistent-declaration-parameter-name %t -- -- -std=c++11 -fno-delayed-template-parsing
+// RUN: %check_clang_tidy %s readability-inconsistent-declaration-parameter-name %t -- -- -fno-delayed-template-parsing
void consistentFunction(int a, int b, int c);
void consistentFunction(int a, int b, int c);
-// RUN: %check_clang_tidy %s readability-isolate-declaration %t -- -- -std=c++17
+// RUN: %check_clang_tidy -std=c++17 %s readability-isolate-declaration %t
template <typename T1, typename T2>
struct pair {
// RUN: %check_clang_tidy %s readability-redundant-declaration %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: readability-redundant-declaration.IgnoreMacros, \
-// RUN: value: 1}]}" \
-// RUN: -- -std=c++11
+// RUN: value: 1}]}"
extern int Xyz;
extern int Xyz; // Xyz
// RUN: %check_clang_tidy %s readability-redundant-declaration %t -- \
// RUN: -config="{CheckOptions: \
// RUN: [{key: readability-redundant-declaration.IgnoreMacros, \
-// RUN: value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: value: 0}]}"
extern int Xyz;
extern int Xyz; // Xyz
// RUN: %check_clang_tidy %s readability-redundant-smartptr-get %t -- \
-// RUN: -config="{CheckOptions: [{key: readability-redundant-smartptr-get.IgnoreMacros, value: 0}]}" \
-// RUN: -- -std=c++11
+// RUN: -config="{CheckOptions: [{key: readability-redundant-smartptr-get.IgnoreMacros, value: 0}]}"
namespace std {
-// RUN: %check_clang_tidy %s readability-redundant-string-cstr %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s readability-redundant-string-cstr %t
typedef unsigned __INT16_TYPE__ char16;
typedef unsigned __INT32_TYPE__ char32;
-// RUN: %check_clang_tidy %s readability-redundant-string-init %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s readability-redundant-string-init %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
template <typename T>
-// RUN: %check_clang_tidy %s readability-redundant-string-init %t
+// RUN: %check_clang_tidy -std=c++11,c++14 %s readability-redundant-string-init %t
+// FIXME: Fix the checker to work in C++17 mode.
namespace std {
template <typename T>
-// RUN: %check_clang_tidy %s readability-string-compare %t -- -- -std=c++11
+// RUN: %check_clang_tidy %s readability-string-compare %t
namespace std {
template <typename T>
-// RUN: %check_clang_tidy %s readability-uppercase-literal-suffix %t -- -- -target x86_64-pc-linux-gnu -I %S -std=cl2.0 -x cl
+// RUN: %check_clang_tidy -std=cl2.0 %s readability-uppercase-literal-suffix %t -- -- -target x86_64-pc-linux-gnu -I %S -x cl
// RUN: grep -Ev "// *[A-Z-]+:" %s > %t.cpp
// RUN: clang-tidy %t.cpp -checks='-*,readability-uppercase-literal-suffix' -fix -- -target x86_64-pc-linux-gnu -I %S -std=cl2.0 -x cl
// RUN: clang-tidy %t.cpp -checks='-*,readability-uppercase-literal-suffix' -warnings-as-errors='-*,readability-uppercase-literal-suffix' -- -target x86_64-pc-linux-gnu -I %S -std=cl2.0 -x cl
// RUN: %check_clang_tidy %s zircon-temporary-objects %t -- \
// RUN: -config="{CheckOptions: [{key: zircon-temporary-objects.Names, value: 'Foo;NS::Bar'}]}" \
-// RUN: -header-filter=.* \
-// RUN: -- -std=c++11
+// RUN: -header-filter=.*
// Should flag instances of Foo, NS::Bar.