annotate clang/test/Sema/attr-naked.c @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clang_cc1 %s -verify -fsyntax-only -triple i686-pc-linux
anatofuz
parents:
diff changeset
2
anatofuz
parents:
diff changeset
3 int a __attribute__((naked)); // expected-warning {{'naked' attribute only applies to functions}}
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 __attribute__((naked)) int t0(void) {
anatofuz
parents:
diff changeset
6 __asm__ volatile("mov r0, #0");
anatofuz
parents:
diff changeset
7 }
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 void t1() __attribute__((naked));
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 void t2() __attribute__((naked(2))); // expected-error {{'naked' attribute takes no arguments}}
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 __attribute__((naked)) int t3() { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
14 return 42; // expected-error{{non-ASM statement in naked function is not supported}}
anatofuz
parents:
diff changeset
15 }
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 __attribute__((naked)) int t4() {
anatofuz
parents:
diff changeset
18 asm("movl $42, %eax");
anatofuz
parents:
diff changeset
19 asm("retl");
anatofuz
parents:
diff changeset
20 }
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 __attribute__((naked)) int t5(int x) {
anatofuz
parents:
diff changeset
23 asm("movl x, %eax");
anatofuz
parents:
diff changeset
24 asm("retl");
anatofuz
parents:
diff changeset
25 }
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 __attribute__((naked)) void t6() {
anatofuz
parents:
diff changeset
28 ;
anatofuz
parents:
diff changeset
29 }
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 __attribute__((naked)) void t7() {
anatofuz
parents:
diff changeset
32 asm("movl $42, %eax");
anatofuz
parents:
diff changeset
33 ;
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 extern int x, y;
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 __attribute__((naked)) void t8(int z) { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
39 __asm__ ("movl $42, %1"
anatofuz
parents:
diff changeset
40 : "=r"(x),
anatofuz
parents:
diff changeset
41 "=r"(z) // expected-error{{parameter references not allowed in naked functions}}
anatofuz
parents:
diff changeset
42 );
anatofuz
parents:
diff changeset
43 }
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 __attribute__((naked)) void t9(int z) { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
46 __asm__ ("movl %eax, %1"
anatofuz
parents:
diff changeset
47 : : "r"(x),
anatofuz
parents:
diff changeset
48 "r"(z) // expected-error{{parameter references not allowed in naked functions}}
anatofuz
parents:
diff changeset
49 );
anatofuz
parents:
diff changeset
50 }
anatofuz
parents:
diff changeset
51
anatofuz
parents:
diff changeset
52 __attribute__((naked)) void t10() { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
53 int a; // expected-error{{non-ASM statement in naked function is not supported}}
anatofuz
parents:
diff changeset
54 }
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 __attribute__((naked)) void t11() { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
57 register int a asm("eax") = x; // expected-error{{non-ASM statement in naked function is not supported}}
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 __attribute__((naked)) void t12() { // expected-note{{attribute is here}}
anatofuz
parents:
diff changeset
61 register int a asm("eax"), b asm("ebx") = x; // expected-error{{non-ASM statement in naked function is not supported}}
anatofuz
parents:
diff changeset
62 }
anatofuz
parents:
diff changeset
63
anatofuz
parents:
diff changeset
64 __attribute__((naked)) void t13() {
anatofuz
parents:
diff changeset
65 register int a asm("eax");
anatofuz
parents:
diff changeset
66 register int b asm("ebx"), c asm("ecx");
anatofuz
parents:
diff changeset
67 }
anatofuz
parents:
diff changeset
68