diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/function-attributes.c | 7 | ||||
| -rw-r--r-- | clang/test/Sema/attr-ms-hook-prologue-wrong-arch.c | 6 | ||||
| -rw-r--r-- | clang/test/Sema/attr-ms-hook-prologue.c | 22 |
3 files changed, 35 insertions, 0 deletions
diff --git a/clang/test/CodeGen/function-attributes.c b/clang/test/CodeGen/function-attributes.c index 8f682a715d7..d0374c18660 100644 --- a/clang/test/CodeGen/function-attributes.c +++ b/clang/test/CodeGen/function-attributes.c @@ -108,11 +108,18 @@ void f20(void) { _setjmp(0); } +// CHECK-LABEL: define void @f21 +// CHECK: [[HOTPATCH:#[0-9]+]] +// CHECK: { +void __attribute__((ms_hook_prologue)) f21(void) { +} + // CHECK: attributes [[NUW]] = { nounwind optsize{{.*}} } // CHECK: attributes [[AI]] = { alwaysinline nounwind optsize{{.*}} } // CHECK: attributes [[NUW_OS_RN]] = { nounwind optsize readnone{{.*}} } // CHECK: attributes [[ALIGN]] = { nounwind optsize alignstack=16{{.*}} } // CHECK: attributes [[RT]] = { nounwind optsize returns_twice{{.*}} } +// CHECK: attributes [[HOTPATCH]] = { nounwind optsize{{.*}}"patchable-function"="ms-hotpatch"{{.*}} } // CHECK: attributes [[NR]] = { noreturn optsize } // CHECK: attributes [[NUW_RN]] = { nounwind optsize readnone } // CHECK: attributes [[RT_CALL]] = { optsize returns_twice } diff --git a/clang/test/Sema/attr-ms-hook-prologue-wrong-arch.c b/clang/test/Sema/attr-ms-hook-prologue-wrong-arch.c new file mode 100644 index 00000000000..cd4b591cbb3 --- /dev/null +++ b/clang/test/Sema/attr-ms-hook-prologue-wrong-arch.c @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -triple s390x-unknown-linux -fms-extensions -fsyntax-only -verify %s + +// expected-warning@+1{{unknown attribute 'ms_hook_prologue' ignored}} +int __attribute__((ms_hook_prologue)) foo(int a, int b) { + return a+b; +} diff --git a/clang/test/Sema/attr-ms-hook-prologue.c b/clang/test/Sema/attr-ms-hook-prologue.c new file mode 100644 index 00000000000..5417f4aa59c --- /dev/null +++ b/clang/test/Sema/attr-ms-hook-prologue.c @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -triple i386-pc-linux -fms-extensions -fsyntax-only -verify %s + +int __attribute__((ms_hook_prologue)) foo(int a, int b) { + return a+b; +} + +// expected-note@+2{{conflicting attribute is here}} +// expected-error@+1{{'naked' and 'ms_hook_prologue' attributes are not compatible}} +__declspec(naked) int __attribute__((ms_hook_prologue)) bar(int a, int b) { +} + +// expected-note@+2{{conflicting attribute is here}} +// expected-error@+1{{'__forceinline' and 'ms_hook_prologue' attributes are not compatible}} +__forceinline int __attribute__((ms_hook_prologue)) baz(int a, int b) { + return a-b; +} + +// expected-warning@+1{{'ms_hook_prologue' attribute only applies to functions}} +int x __attribute__((ms_hook_prologue)); + +// expected-error@+1{{'ms_hook_prologue' attribute takes no arguments}} +int f(int a, int b) __attribute__((ms_hook_prologue(2))); |

