Clang Project

clang_source_code/test/Sema/pragma-attribute.c
1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3#pragma clang attribute pop // expected-error {{'#pragma clang attribute pop' with no matching '#pragma clang attribute push'}}
4
5// Don't verify unused attributes.
6#pragma clang attribute push (__attribute__((annotate)), apply_to = function) // expected-warning {{unused attribute 'annotate' in '#pragma clang attribute push' region}}
7#pragma clang attribute pop // expected-note {{'#pragma clang attribute push' regions ends here}}
8
9// Ensure we only report any errors once.
10#pragma clang attribute push (__attribute__((annotate)), apply_to = function) // expected-error 4 {{'annotate' attribute takes one argument}}
11
12void test5_begin(); // expected-note {{when applied to this declaration}}
13void test5_1(); // expected-note {{when applied to this declaration}}
14
15#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error 2 {{'annotate' attribute takes one argument}}
16
17void test5_2(); // expected-note 2 {{when applied to this declaration}}
18
19#pragma clang attribute push (__attribute__((annotate("hello", "world"))), apply_to = function) // expected-error {{'annotate' attribute takes one argument}}
20
21void test5_3(); // expected-note 3 {{when applied to this declaration}}
22
23#pragma clang attribute pop
24#pragma clang attribute pop
25#pragma clang attribute pop
26
27// Verify that the warnings are reported for each receiver declaration
28
29#pragma clang attribute push (__attribute__((optnone)), apply_to = function) // expected-note 2 {{conflicting attribute is here}}
30
31__attribute__((always_inline)) void optnone1() { } // expected-warning {{'always_inline' attribute ignored}}
32// expected-note@-1 {{when applied to this declaration}}
33
34void optnone2() { }
35
36__attribute__((always_inline)) void optnone3() { } // expected-warning {{'always_inline' attribute ignored}}
37// expected-note@-1 {{when applied to this declaration}}
38
39#pragma clang attribute pop
40
41#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes one argument}}
42#pragma clang attribute (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes one argument}}
43
44void fun(); // expected-note 2 {{when applied to this declaration}}
45
46#pragma clang attribute pop
47#pragma clang attribute pop // expected-error{{'#pragma clang attribute pop' with no matching '#pragma clang attribute push'}}
48
49
50#pragma clang attribute push
51#pragma clang attribute (__attribute__((annotate())), apply_to = function) // expected-error 2 {{'annotate' attribute takes one argument}}
52
53void fun2(); // expected-note {{when applied to this declaration}}
54
55#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes one argument}}
56void fun3(); // expected-note 2 {{when applied to this declaration}}
57#pragma clang attribute pop
58
59#pragma clang attribute pop
60#pragma clang attribute pop // expected-error{{'#pragma clang attribute pop' with no matching '#pragma clang attribute push'}}
61
62#pragma clang attribute (__attribute__((annotate)), apply_to = function) // expected-error{{'#pragma clang attribute' attribute with no matching '#pragma clang attribute push}}
63
64#pragma clang attribute push ([[]], apply_to = function) // A noop
65
66#pragma clang attribute pop // expected-error {{'#pragma clang attribute pop' with no matching '#pragma clang attribute push'}}
67
68#pragma clang attribute push (__attribute__((annotate("func"))), apply_to = function) // expected-error {{unterminated '#pragma clang attribute push' at end of file}}
69
70void function();
71