summaryrefslogtreecommitdiff
path: root/test/Assembler
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-06-27 00:25:01 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-06-27 00:25:01 +0000
commit2253a2f52f3c46ae75cd05f5885acb987bd1d6b6 (patch)
tree483f06fa8a9b2981c441c49dde73b45eb724c03d /test/Assembler
parent9367c79e62307421f28ba92174f3792a6360f37b (diff)
downloadllvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.gz
llvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.bz2
llvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.xz
Added support for the Builtin attribute.
The Builtin attribute is an attribute that can be placed on function call site that signal that even though a function is declared as being a builtin, rdar://problem/13727199 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185049 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Assembler')
-rw-r--r--test/Assembler/attribute-builtin.ll52
1 files changed, 52 insertions, 0 deletions
diff --git a/test/Assembler/attribute-builtin.ll b/test/Assembler/attribute-builtin.ll
new file mode 100644
index 0000000000..0b322aa983
--- /dev/null
+++ b/test/Assembler/attribute-builtin.ll
@@ -0,0 +1,52 @@
+
+; Make sure that llvm-as/llvm-dis properly assembly/disassembly the 'builtin'
+; attribute.
+;
+; rdar://13727199
+
+; RUN: llvm-as -disable-verify < %s | \
+; llvm-dis -disable-verify | \
+; llvm-as -disable-verify | \
+; llvm-dis -disable-verify | \
+; FileCheck -check-prefix=ASSEMBLES %s
+
+; CHECK-ASSEMBLES: declare i8* @foo(i8*) [[NOBUILTIN:#[0-9]+]]
+; CHECK-ASSEMBLES: call i8* @foo(i8* %x) [[BUILTIN:#[0-9]+]]
+; CHECK-ASSEMBLES: attributes [[NOBUILTIN]] = { nobuiltin }
+; CHECK-ASSEMBLES: attributes [[BUILTIN]] = { builtin }
+
+declare i8* @foo(i8*) #1
+define i8* @bar(i8* %x) {
+ %y = call i8* @foo(i8* %x) #0
+ ret i8* %y
+}
+
+; Make sure that we do not accept the 'builtin' attribute on function
+; definitions, function declarations, and on call sites that call functions
+; which do not have nobuiltin on them.
+; rdar://13727199
+
+; RUN: not llvm-as <%s 2>&1 | FileCheck -check-prefix=BAD %s
+
+; CHECK-BAD: Attribute 'builtin' can only be used in a call to a function with the 'nobuiltin' attribute.
+; CHECK-BAD-NEXT: %y = call i8* @lar(i8* %x) #1
+; CHECK-BAD: Attribute 'builtin' can only be applied to a callsite.
+; CHECK-BAD-NEXT: i8* (i8*)* @car
+; CHECK-BAD: Attribute 'builtin' can only be applied to a callsite.
+; CHECK-BAD-NEXT: i8* (i8*)* @mar
+
+declare i8* @lar(i8*)
+
+define i8* @har(i8* %x) {
+ %y = call i8* @lar(i8* %x) #0
+ ret i8* %y
+}
+
+define i8* @car(i8* %x) #0 {
+ ret i8* %x
+}
+
+declare i8* @mar(i8*) #0
+
+attributes #0 = { builtin }
+attributes #1 = { nobuiltin }