From 2253a2f52f3c46ae75cd05f5885acb987bd1d6b6 Mon Sep 17 00:00:00 2001 From: Michael Gottesman Date: Thu, 27 Jun 2013 00:25:01 +0000 Subject: 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 --- test/Assembler/attribute-builtin.ll | 52 +++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/Assembler/attribute-builtin.ll (limited to 'test/Assembler') 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 } -- cgit v1.2.3