CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
240 lines
18 KiB
C
240 lines
18 KiB
C
// RUN: %clang_cc1 -fsyntax-only -verify -Wc++-keyword %s
|
|
// RUN: %clang_cc1 -fsyntax-only -verify -Wc++-compat %s
|
|
// RUN: %clang_cc1 -fsyntax-only -verify=good %s
|
|
// RUN: %clang_cc1 -fsyntax-only -verify=cxx -x c++ -std=c++2c %s
|
|
// good-no-diagnostics
|
|
|
|
// 'try', 'this' and 'throw' are not tested as identifiers, but are instead
|
|
// tested as other constructs (otherwise there would be redefinition errors in
|
|
// C).
|
|
int catch; // expected-warning {{identifier 'catch' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int class; // expected-warning {{identifier 'class' conflicts with a C++ keyword}} \
|
|
cxx-error {{declaration of anonymous class must be a definition}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int const_cast; // expected-warning {{identifier 'const_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int delete; // expected-warning {{identifier 'delete' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int dynamic_cast; // expected-warning {{identifier 'dynamic_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int explicit; // expected-warning {{identifier 'explicit' conflicts with a C++ keyword}} \
|
|
cxx-error {{'explicit' can only appear on non-static member functions}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int export; // expected-warning {{identifier 'export' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int friend; // expected-warning {{identifier 'friend' conflicts with a C++ keyword}} \
|
|
cxx-error {{'friend' used outside of class}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int mutable; // expected-warning {{identifier 'mutable' conflicts with a C++ keyword}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int namespace; // expected-warning {{identifier 'namespace' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int new; // expected-warning {{identifier 'new' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int operator; // expected-warning {{identifier 'operator' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected a type}}
|
|
int private; // expected-warning {{identifier 'private' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int protected; // expected-warning {{identifier 'protected' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int public; // expected-warning {{identifier 'public' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int reinterpret_cast; // expected-warning {{identifier 'reinterpret_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int static_cast; // expected-warning {{identifier 'static_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int template; // expected-warning {{identifier 'template' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int typename; // expected-warning {{identifier 'typename' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected a qualified name after 'typename'}}
|
|
int typeid; // expected-warning {{identifier 'typeid' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int using; // expected-warning {{identifier 'using' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int virtual; // expected-warning {{identifier 'virtual' conflicts with a C++ keyword}} \
|
|
cxx-error {{'virtual' can only appear on non-static member functions}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int wchar_t; // expected-warning {{identifier 'wchar_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char8_t; // expected-warning {{identifier 'char8_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char16_t; // expected-warning {{identifier 'char16_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char32_t; // expected-warning {{identifier 'char32_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int noexcept; // expected-warning {{identifier 'noexcept' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int co_await; // expected-warning {{identifier 'co_await' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int co_return; // expected-warning {{identifier 'co_return' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int co_yield; // expected-warning {{identifier 'co_yield' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int consteval; // expected-warning {{identifier 'consteval' conflicts with a C++ keyword}} \
|
|
cxx-error {{consteval can only be used in function declarations}}
|
|
int constinit; // expected-warning {{identifier 'constinit' conflicts with a C++ keyword}} \
|
|
cxx-error {{constinit can only be used in variable declarations}}
|
|
int concept; // expected-warning {{identifier 'concept' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int requires; // expected-warning {{identifier 'requires' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
|
|
// Now try the same thing, but as struct members.
|
|
struct S {
|
|
int catch; // expected-warning {{identifier 'catch' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int class; // expected-warning {{identifier 'class' conflicts with a C++ keyword}} \
|
|
cxx-error {{declaration of anonymous class must be a definition}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int const_cast; // expected-warning {{identifier 'const_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int delete; // expected-warning {{identifier 'delete' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int dynamic_cast; // expected-warning {{identifier 'dynamic_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int explicit; // expected-warning {{identifier 'explicit' conflicts with a C++ keyword}} \
|
|
cxx-error {{'explicit' can only appear on non-static member functions}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int export; // expected-warning {{identifier 'export' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int friend; // expected-warning {{identifier 'friend' conflicts with a C++ keyword}} \
|
|
cxx-error {{'friend' must appear first in a non-function declaration}}
|
|
int mutable; // expected-warning {{identifier 'mutable' conflicts with a C++ keyword}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int namespace; // expected-warning {{identifier 'namespace' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int new; // expected-warning {{identifier 'new' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int operator; // expected-warning {{identifier 'operator' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected a type}}
|
|
int private; // expected-warning {{identifier 'private' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int protected; // expected-warning {{identifier 'protected' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int public; // expected-warning {{identifier 'public' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int reinterpret_cast; // expected-warning {{identifier 'reinterpret_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int static_cast; // expected-warning {{identifier 'static_cast' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int template; // expected-warning {{identifier 'template' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int this; // expected-warning {{identifier 'this' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int throw; // expected-warning {{identifier 'throw' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int try; // expected-warning {{identifier 'try' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int typename; // expected-warning {{identifier 'typename' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected a qualified name after 'typename'}}
|
|
int typeid; // expected-warning {{identifier 'typeid' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int using; // expected-warning {{identifier 'using' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int virtual; // expected-warning {{identifier 'virtual' conflicts with a C++ keyword}} \
|
|
cxx-error {{'virtual' can only appear on non-static member functions}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int wchar_t; // expected-warning {{identifier 'wchar_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char8_t; // expected-warning {{identifier 'char8_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char16_t; // expected-warning {{identifier 'char16_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int char32_t; // expected-warning {{identifier 'char32_t' conflicts with a C++ keyword}} \
|
|
cxx-error {{cannot combine with previous 'int' declaration specifier}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int noexcept; // expected-warning {{identifier 'noexcept' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int co_await; // expected-warning {{identifier 'co_await' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int co_return; // expected-warning {{identifier 'co_return' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int co_yield; // expected-warning {{identifier 'co_yield' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}}
|
|
int consteval; // expected-warning {{identifier 'consteval' conflicts with a C++ keyword}} \
|
|
cxx-error {{consteval can only be used in function declarations}}
|
|
int constinit; // expected-warning {{identifier 'constinit' conflicts with a C++ keyword}} \
|
|
cxx-error {{constinit can only be used in variable declarations}}
|
|
int concept; // expected-warning {{identifier 'concept' conflicts with a C++ keyword}} \
|
|
cxx-error {{concept declarations may only appear in global or namespace scope}}
|
|
int requires; // expected-warning {{identifier 'requires' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected member name or ';' after declaration specifiers}} \
|
|
cxx-error {{trailing requires clause can only be used when declaring a function}} \
|
|
cxx-error {{expected expression}}
|
|
};
|
|
|
|
// Smoke test that we catch a keyword used as an enumerator. If we diagnose
|
|
// one, we'll diagnose them all.
|
|
enum E {
|
|
throw, // expected-warning {{identifier 'throw' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected identifier}}
|
|
};
|
|
|
|
// Smoke test that we catch a keyword used as a tag name.
|
|
struct try { // expected-warning {{identifier 'try' conflicts with a C++ keyword}} \
|
|
cxx-error {{declaration of anonymous struct must be a definition}} \
|
|
cxx-warning {{declaration does not declare anything}}
|
|
int x;
|
|
};
|
|
|
|
// Smoke test that we catch keyword use in a function name.
|
|
void this(void); // expected-warning {{identifier 'this' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
|
|
// Smoke test that we catch keyword use in function parameters too.
|
|
void func(int private); // expected-warning {{identifier 'private' conflicts with a C++ keyword}} \
|
|
cxx-error {{invalid parameter name: 'private' is a keyword}}
|
|
|
|
// These are conditionally a keyword in C++, so they're intentionally not being
|
|
// diagnosed as a keyword.
|
|
int module;
|
|
int import;
|
|
int override;
|
|
int final;
|
|
|
|
// We do not diagnose use of C++ keywords when used as a macro name because
|
|
// that does not conflict with C++ (the macros will be replaced before the
|
|
// keyword is seen by the parser).
|
|
#define this 12
|
|
|
|
// FIXME: These tests are disabled for C++ because it causes a crash.
|
|
// See GH114815.
|
|
#ifndef __cplusplus
|
|
int decltype; // expected-warning {{identifier 'decltype' conflicts with a C++ keyword}}
|
|
struct T {
|
|
int decltype; // expected-warning {{identifier 'decltype' conflicts with a C++ keyword}}
|
|
};
|
|
#endif // __cplusplus
|
|
|
|
// Check alternative operator names.
|
|
int and; // expected-warning {{identifier 'and' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int and_eq; // expected-warning {{identifier 'and_eq' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int bitand; // expected-warning {{identifier 'bitand' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int bitor; // expected-warning {{identifier 'bitor' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int compl; // expected-warning {{identifier 'compl' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected a class name after '~' to name a destructor}}
|
|
int not; // expected-warning {{identifier 'not' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int not_eq; // expected-warning {{identifier 'not_eq' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int or; // expected-warning {{identifier 'or' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int or_eq; // expected-warning {{identifier 'or_eq' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int xor; // expected-warning {{identifier 'xor' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|
|
int xor_eq; // expected-warning {{identifier 'xor_eq' conflicts with a C++ keyword}} \
|
|
cxx-error {{expected unqualified-id}}
|