diff options
Diffstat (limited to 'test/Sema/attr-naked.c')
-rw-r--r-- | test/Sema/attr-naked.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/test/Sema/attr-naked.c b/test/Sema/attr-naked.c index 55c6b32..6b1344a 100644 --- a/test/Sema/attr-naked.c +++ b/test/Sema/attr-naked.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -verify -fsyntax-only +// RUN: %clang_cc1 %s -verify -fsyntax-only -triple i686-pc-linux int a __attribute__((naked)); // expected-warning {{'naked' attribute only applies to functions}} @@ -10,3 +10,41 @@ void t1() __attribute__((naked)); void t2() __attribute__((naked(2))); // expected-error {{'naked' attribute takes no arguments}} +__attribute__((naked)) int t3() { // expected-note{{attribute is here}} + return 42; // expected-error{{non-ASM statement in naked function is not supported}} +} + +__attribute__((naked)) int t4() { + asm("movl $42, %eax"); + asm("retl"); +} + +__attribute__((naked)) int t5(int x) { + asm("movl x, %eax"); + asm("retl"); +} + +__attribute__((naked)) void t6() { + ; +} + +__attribute__((naked)) void t7() { + asm("movl $42, %eax"); + ; +} + +extern int x, y; + +__attribute__((naked)) void t8(int z) { // expected-note{{attribute is here}} + __asm__ ("movl $42, %1" + : "=r"(x), + "=r"(z) // expected-error{{parameter references not allowed in naked functions}} + ); +} + +__attribute__((naked)) void t9(int z) { // expected-note{{attribute is here}} + __asm__ ("movl %eax, %1" + : : "r"(x), + "r"(z) // expected-error{{parameter references not allowed in naked functions}} + ); +} |