59 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -Wattribute-preprocessor-tokens -verify %s2// RUN: %clang_cc1 -Wattribute-preprocessor-tokens -E %s | FileCheck %s3// RUN: %clang_cc1 -x c -fsyntax-only -verify=c %s4// RUN: %clang_cc1 -x c -E %s | FileCheck %s5 6#define ATTR_STR(X) [[clang::annotate(#X)]]7#define ATTR_PASTE(X, Y) [[clang::annotate("test", X ## Y)]]8 9[[clang::assume(#)]] void f1(); // c-error {{expected expression}} \10 // expected-warning {{'#' is not allowed in an attribute argument list}}11 12[[clang::assume(##)]] void f2(); // c-error {{expected expression}} \13 // expected-warning {{'##' is not allowed in an attribute argument list}}14 15[[clang::assume(1#2#3)]] void f3(); // c-error {{use of this expression in an 'assume' attribute requires parentheses}} \16 // c-error {{expected ')'}} \17 // c-note {{to match this '('}} \18 // expected-warning {{'#' is not allowed in an attribute argument list}} \19 // expected-warning {{'#' is not allowed in an attribute argument list}}20 21[[unknown::unknown(#)]] void f4(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \22 // expected-warning {{'#' is not allowed in an attribute argument list}}23 24[[unknown::unknown(##)]] void f5(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \25 // expected-warning {{'##' is not allowed in an attribute argument list}}26 27[[unknown::unknown(1#2#3)]] void f6(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \28 // expected-warning {{'#' is not allowed in an attribute argument list}} \29 // expected-warning {{'#' is not allowed in an attribute argument list}}30 31[[clang::assume(%:)]] void f7(); // c-error {{expected expression}} \32 // expected-warning {{'%:' is not allowed in an attribute argument list}}33 34 35[[clang::assume(%:%:)]] void f8(); // c-error {{expected expression}} \36 // expected-warning {{'%:%:' is not allowed in an attribute argument list}}37 38[[clang::assume(1%:2%:3)]] void f9(); // c-error {{use of this expression in an 'assume' attribute requires parentheses}} \39 // c-error {{expected ')'}} \40 // c-note {{to match this '('}} \41 // expected-warning {{'%:' is not allowed in an attribute argument list}} \42 // expected-warning {{'%:' is not allowed in an attribute argument list}}43 44[[unknown::unknown(%:)]] void f10(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \45 // expected-warning {{'%:' is not allowed in an attribute argument list}}46 47[[unknown::unknown(%:%:)]] void f11(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \48 // expected-warning {{'%:%:' is not allowed in an attribute argument list}}49 50[[unknown::unknown(1%:2%:3)]] void f12(); // c-warning {{unknown attribute 'unknown::unknown' ignored}} \51 // expected-warning {{'%:' is not allowed in an attribute argument list}} \52 // expected-warning {{'%:' is not allowed in an attribute argument list}}53 54ATTR_STR(stringify) void f13();55// CHECK: {{\[\[}}clang{{::}}annotate("stringify"){{\]\]}} void f13();56 57ATTR_PASTE(1, 2) void f14();58// CHECK: {{\[\[}}clang{{::}}annotate("test", 12){{\]\]}} void f14();59