45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
|
// RUN: %clang_cc1 -fdouble-square-bracket-attributes -std=c11 -E -P %s -o - | FileCheck %s
|
||
|
// RUN: %clang_cc1 -std=c2x -E -P %s -o - | FileCheck %s
|
||
|
|
||
|
#define C2x(x) x: __has_c_attribute(x)
|
||
|
|
||
|
// CHECK: fallthrough: 201904L
|
||
|
C2x(fallthrough)
|
||
|
|
||
|
// CHECK: __nodiscard__: 201904L
|
||
|
C2x(__nodiscard__)
|
||
|
|
||
|
// CHECK: selectany: 0
|
||
|
C2x(selectany); // Known attribute not supported in C mode
|
||
|
|
||
|
// CHECK: frobble: 0
|
||
|
C2x(frobble) // Unknown attribute
|
||
|
|
||
|
// CHECK: frobble::frobble: 0
|
||
|
C2x(frobble::frobble) // Unknown vendor namespace
|
||
|
|
||
|
// CHECK: clang::annotate: 1
|
||
|
C2x(clang::annotate)
|
||
|
|
||
|
// CHECK: deprecated: 201904L
|
||
|
C2x(deprecated)
|
||
|
|
||
|
// CHECK: maybe_unused: 201904L
|
||
|
C2x(maybe_unused)
|
||
|
|
||
|
// CHECK: __gnu__::warn_unused_result: 201904L
|
||
|
C2x(__gnu__::warn_unused_result)
|
||
|
|
||
|
// CHECK: gnu::__warn_unused_result__: 201904L
|
||
|
C2x(gnu::__warn_unused_result__)
|
||
|
|
||
|
// We do somewhat support the __clang__ vendor namespace, but it is a
|
||
|
// predefined macro and thus we encourage users to use _Clang instead.
|
||
|
// Because of this, we do not support __has_c_attribute for that
|
||
|
// vendor namespace.
|
||
|
//
|
||
|
// Note, we can't use C2x here because it will expand __clang__ to 1
|
||
|
// too early.
|
||
|
// CHECK: 1::fallthrough: 0
|
||
|
__clang__::fallthrough: __has_c_attribute(__clang__::fallthrough)
|