]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Parser/cxx0x-attributes.cpp
Vendor import of clang trunk r130700:
[FreeBSD/FreeBSD.git] / test / Parser / cxx0x-attributes.cpp
1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -fsyntax-only -verify -std=c++0x %s
2
3 // Declaration syntax checks
4 [[]] int before_attr;
5 int after_attr [[]];
6 int * [[]] ptr_attr;
7 int array_attr [1] [[]];
8 [[align(8)]] int aligned_attr;
9 [[test::valid(for 42 [very] **** '+' symbols went on a trip; the end.)]]
10   int garbage_attr;
11 void fn_attr () [[]];
12 class [[]] class_attr {};
13 extern "C++" [[]] int extern_attr;
14 template <typename T> [[]] void template_attr ();
15
16 int comma_attr [[,]]; // expected-error {{expected identifier}}
17 int scope_attr [[foo::]]; // expected-error {{expected identifier}}
18 int & [[]] ref_attr = after_attr; // expected-error {{an attribute list cannot appear here}}
19 class foo {
20   void after_const_attr () const [[]]; // expected-error {{expected expression}}
21 };
22 extern "C++" [[]] { } // expected-error {{an attribute list cannot appear here}}
23 [[]] template <typename T> void before_template_attr (); // expected-error {{an attribute list cannot appear here}}
24 [[]] namespace ns { int i; } // expected-error {{an attribute list cannot appear here}}
25 [[]] static_assert(true, ""); //expected-error {{an attribute list cannot appear here}}
26 [[]] asm(""); // expected-error {{an attribute list cannot appear here}}
27
28 [[]] using ns::i; // expected-error {{an attribute list cannot appear here}}
29 [[]] using namespace ns;
30
31 // Argument tests
32 [[align]] int aligned_no_params; // expected-error {{C++0x attribute 'align' must have an argument list}}
33 [[align(i)]] int aligned_nonconst; // expected-error {{'aligned' attribute requires integer constant}}
34
35 // Statement tests
36 void foo () {
37   [[]] ;
38   [[]] { }
39   [[]] if (0) { }
40   [[]] for (;;);
41   [[]] do {
42     [[]] continue;
43   } while (0);
44   [[]] while (0);
45   
46   [[]] switch (i) {
47     [[]] case 0:
48     [[]] default:
49       [[]] break;
50   }
51   
52   [[]] goto there;
53   [[]] there:
54   
55   [[]] try {
56   } [[]] catch (...) { // expected-error {{an attribute list cannot appear here}}
57   }
58   
59   [[]] return;
60 }