Mercurial > hg > CbC > CbC_llvm
view clang/test/Preprocessor/has_attribute.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children |
line wrap: on
line source
// RUN: %clang_cc1 -triple i386-unknown-unknown -fms-compatibility -std=c++11 -E -P %s -o - | FileCheck %s --check-prefixes=CHECK,ITANIUM --implicit-check-not=: // RUN: %clang_cc1 -triple i386-windows -fms-compatibility -std=c++11 -E -P %s -o - | FileCheck %s --check-prefixes=CHECK,WINDOWS --implicit-check-not=: #define CXX11(x) x: __has_cpp_attribute(x) // CHECK: clang::fallthrough: 201603L CXX11(clang::fallthrough) // CHECK: selectany: 0 CXX11(selectany) // The attribute name can be bracketed with double underscores. // CHECK: clang::__fallthrough__: 201603L CXX11(clang::__fallthrough__) // The scope cannot be bracketed with double underscores unless it is // for gnu or clang. // CHECK: __gsl__::suppress: 0 CXX11(__gsl__::suppress) // CHECK: _Clang::fallthrough: 201603L CXX11(_Clang::fallthrough) // CHECK: __nodiscard__: 201907L CXX11(__nodiscard__) // CHECK: __gnu__::__const__: 1 CXX11(__gnu__::__const__) // Test that C++11, target-specific attributes behave properly. // CHECK: gnu::mips16: 0 CXX11(gnu::mips16) // Test for standard attributes as listed in C++2a [cpp.cond] paragraph 6. CXX11(assert) CXX11(carries_dependency) CXX11(deprecated) CXX11(ensures) CXX11(expects) CXX11(fallthrough) CXX11(likely) CXX11(maybe_unused) CXX11(no_unique_address) CXX11(nodiscard) CXX11(noreturn) CXX11(unlikely) // FIXME(201806L) CHECK: assert: 0 // CHECK: carries_dependency: 200809L // CHECK: deprecated: 201309L // FIXME(201806L) CHECK: ensures: 0 // FIXME(201806L) CHECK: expects: 0 // CHECK: fallthrough: 201603L // CHECK: likely: 201803L // CHECK: maybe_unused: 201603L // ITANIUM: no_unique_address: 201803L // WINDOWS: no_unique_address: 0 // CHECK: nodiscard: 201907L // CHECK: noreturn: 200809L // CHECK: unlikely: 201803L namespace PR48462 { // Test that macro expansion of the builtin argument works. #define C clang #define F fallthrough #define CF clang::fallthrough #if __has_cpp_attribute(F) int has_fallthrough; #endif // CHECK: int has_fallthrough; #if __has_cpp_attribute(C::F) int has_clang_falthrough_1; #endif // CHECK: int has_clang_falthrough_1; #if __has_cpp_attribute(clang::F) int has_clang_falthrough_2; #endif // CHECK: int has_clang_falthrough_2; #if __has_cpp_attribute(C::fallthrough) int has_clang_falthrough_3; #endif // CHECK: int has_clang_falthrough_3; #if __has_cpp_attribute(CF) int has_clang_falthrough_4; #endif // CHECK: int has_clang_falthrough_4; #define FUNCLIKE1(x) clang::x #if __has_cpp_attribute(FUNCLIKE1(fallthrough)) int funclike_1; #endif // CHECK: int funclike_1; #define FUNCLIKE2(x) _Clang::x #if __has_cpp_attribute(FUNCLIKE2(fallthrough)) int funclike_2; #endif // CHECK: int funclike_2; } // Test for Microsoft __declspec attributes #define DECLSPEC(x) x: __has_declspec_attribute(x) // CHECK: uuid: 1 // CHECK: __uuid__: 1 DECLSPEC(uuid) DECLSPEC(__uuid__) // CHECK: fallthrough: 0 DECLSPEC(fallthrough) namespace PR48462 { // Test that macro expansion of the builtin argument works. #define U uuid #if __has_declspec_attribute(U) int has_uuid; #endif // CHECK: int has_uuid; }