15cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// RUN: %clang_cc1 -std=c++11 -ast-print -fms-extensions %s | FileCheck %s
2a31f65b10e61ca8f2f427b1df176c10ea8a0efa2Michael Han//
3a31f65b10e61ca8f2f427b1df176c10ea8a0efa2Michael Han// CHECK: int x __attribute__((aligned(4)));
451d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint x __attribute__((aligned(4)));
551d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
65cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith// FIXME: Print this at a valid location for a __declspec attr.
7a31f65b10e61ca8f2f427b1df176c10ea8a0efa2Michael Han// CHECK: int y __declspec(align(4));
85cd532ca0bc1cb8110e24586d064f72332d8b767Richard Smith__declspec(align(4)) int y;
951d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
10d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: int z {{\[}}[gnu::aligned(4)]];
1151d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint z [[gnu::aligned(4)]];
1251d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
1351d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// CHECK: __attribute__((deprecated("warning")));
1451d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint a __attribute__((deprecated("warning")));
1551d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
16d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: int b {{\[}}[gnu::deprecated("warning")]];
1751d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint b [[gnu::deprecated("warning")]];
1851d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
19a31f65b10e61ca8f2f427b1df176c10ea8a0efa2Michael Han// CHECK: int cxx11_alignas alignas(4);
2033f04a208a1a6e73da73460142327ff05e8c391bRichard Smithalignas(4) int cxx11_alignas;
2133f04a208a1a6e73da73460142327ff05e8c391bRichard Smith
22a31f65b10e61ca8f2f427b1df176c10ea8a0efa2Michael Han// CHECK: int c11_alignas _Alignas(alignof(int));
2333f04a208a1a6e73da73460142327ff05e8c391bRichard Smith_Alignas(int) int c11_alignas;
2433f04a208a1a6e73da73460142327ff05e8c391bRichard Smith
2551d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// CHECK: void foo() __attribute__((const));
2651d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanvoid foo() __attribute__((const));
2751d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
2851d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// CHECK: void bar() __attribute__((__const));
2951d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanvoid bar() __attribute__((__const));
3051d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
3151d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// CHECK: int f1() __attribute__((warn_unused_result));
3251d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint f1() __attribute__((warn_unused_result));
3351d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
34d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: {{\[}}[clang::warn_unused_result]];
3551d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint f2 [[clang::warn_unused_result]] ();
3651d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
37d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: {{\[}}[gnu::warn_unused_result]];
3851d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanint f3 [[gnu::warn_unused_result]] ();
3951d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
4051d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// FIXME: ast-print need to print C++11
4151d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// attribute after function declare-id.
42d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: {{\[}}[noreturn]];
4351d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanvoid f4 [[noreturn]] ();
4451d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
4551d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// CHECK: __attribute__((gnu_inline));
4651d8c52ad36129760eaa586f85176037e2cd0d0eMichael Haninline void f6() __attribute__((gnu_inline));
4751d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
48d8be0abf30003766f0eb02c87496f29b178146fbMichael Han// CHECK: {{\[}}[gnu::gnu_inline]];
4951d8c52ad36129760eaa586f85176037e2cd0d0eMichael Haninline void f7 [[gnu::gnu_inline]] ();
5051d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han
5151d8c52ad36129760eaa586f85176037e2cd0d0eMichael Han// arguments printing
52caa5ab264ddea332e8423af1ebcea50d0cb37206Aaron Ballman// CHECK: __attribute__((format(printf, 2, 3)));
5351d8c52ad36129760eaa586f85176037e2cd0d0eMichael Hanvoid f8 (void *, const char *, ...) __attribute__ ((format (printf, 2, 3)));
548f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith
558f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: int m __attribute__((aligned(4
568f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: int n alignas(4
578f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: static int f() __attribute__((pure))
588f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: static int g() {{\[}}[gnu::pure]]
598f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smithtemplate <typename T> struct S {
608f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  __attribute__((aligned(4))) int m;
618f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  alignas(4) int n;
628f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  __attribute__((pure)) static int f() {
638f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith    return 0;
648f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  }
658f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  [[gnu::pure]] static int g() {
668f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith    return 1;
678f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith  }
688f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith};
698f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith
708f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: int m __attribute__((aligned(4
718f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: int n alignas(4
728f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: static int f() __attribute__((pure))
738f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smith// CHECK: static int g() {{\[}}[gnu::pure]]
748f3aacc8c4849c9e0e7a236954725fffdeb917a6Richard Smithtemplate struct S<int>;
75c2fa6b6f9a89f55397355937544fbbe8258ead5dEnea Zaffanella
76c2fa6b6f9a89f55397355937544fbbe8258ead5dEnea Zaffanella// CHECK: using Small2 {{\[}}[gnu::mode(byte)]] = int;
77c2fa6b6f9a89f55397355937544fbbe8258ead5dEnea Zaffanellausing Small2 [[gnu::mode(byte)]] = int;
78