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