summaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/regparm.c
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/regparm.c')
-rw-r--r--clang/test/CodeGen/regparm.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/CodeGen/regparm.c b/clang/test/CodeGen/regparm.c
new file mode 100644
index 0000000..d628b68
--- /dev/null
+++ b/clang/test/CodeGen/regparm.c
@@ -0,0 +1,27 @@
+// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
+
+#define FASTCALL __attribute__((regparm(2)))
+
+typedef struct {
+ int aaa;
+ double bbbb;
+ int ccc[200];
+} foo;
+
+typedef void (*FType)(int, int) __attribute ((regparm (3), stdcall));
+FType bar;
+
+extern void FASTCALL reduced(char b, double c, foo* d, double e, int f);
+
+// PR7025
+void FASTCALL f1(int i, int j, int k);
+// CHECK: define void @f1(i32 inreg %i, i32 inreg %j, i32 %k)
+void f1(int i, int j, int k) { }
+
+int
+main(void) {
+ // CHECK: call void @reduced(i8 signext inreg 0, {{.*}} %struct.foo* inreg null
+ reduced(0, 0.0, 0, 0.0, 0);
+ // CHECK: call x86_stdcallcc void {{.*}}(i32 inreg 1, i32 inreg 2)
+ bar(1,2);
+}