71 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s2 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 at least 1 argument}}11 12void test5_begin(void); // expected-note {{when applied to this declaration}}13void test5_1(void); // expected-note {{when applied to this declaration}}14 15#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error 2 {{'annotate' attribute takes at least 1 argument}}16 17void test5_2(void); // expected-note 2 {{when applied to this declaration}}18 19#pragma clang attribute push (__attribute__((annotate("hello", "world"))), apply_to = function)20 21void test5_3(void); // expected-note 2 {{when applied to this declaration}}22 23#pragma clang attribute pop24#pragma clang attribute pop25#pragma clang attribute pop26 27// Verify that the warnings are reported for each receiver declaration28 29#pragma clang attribute push (__attribute__((optnone)), apply_to = function) // expected-note 2 {{conflicting attribute is here}}30 31__attribute__((always_inline)) void optnone1(void) { } // expected-warning {{'always_inline' attribute ignored}}32// expected-note@-1 {{when applied to this declaration}}33 34void optnone2(void) { }35 36__attribute__((always_inline)) void optnone3(void) { } // expected-warning {{'always_inline' attribute ignored}}37// expected-note@-1 {{when applied to this declaration}}38 39#pragma clang attribute pop40 41#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes at least 1 argument}}42#pragma clang attribute (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes at least 1 argument}}43 44void fun(void); // expected-note 2 {{when applied to this declaration}}45 46#pragma clang attribute pop47#pragma clang attribute pop // expected-error{{'#pragma clang attribute pop' with no matching '#pragma clang attribute push'}}48 49 50#pragma clang attribute push51#pragma clang attribute (__attribute__((annotate())), apply_to = function) // expected-error 2 {{'annotate' attribute takes at least 1 argument}}52 53void fun2(void); // expected-note {{when applied to this declaration}}54 55#pragma clang attribute push (__attribute__((annotate())), apply_to = function) // expected-error{{'annotate' attribute takes at least 1 argument}}56void fun3(void); // expected-note 2 {{when applied to this declaration}}57#pragma clang attribute pop58 59#pragma clang attribute pop60#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 noop65 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(void);71