summaryrefslogtreecommitdiff
path: root/test/Bitcode
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2013-07-26 04:16:55 +0000
committerTobias Grosser <tobias@grosser.es>2013-07-26 04:16:55 +0000
commite7bc5bb8622123b4a1507e7d219ab570a43e5bdf (patch)
tree31bf0371d5d0601560856c0f43498648c72456cf /test/Bitcode
parentb3053c528a570d20a4562e00dbecd1947f4848e7 (diff)
downloadllvm-e7bc5bb8622123b4a1507e7d219ab570a43e5bdf.tar.gz
llvm-e7bc5bb8622123b4a1507e7d219ab570a43e5bdf.tar.bz2
llvm-e7bc5bb8622123b4a1507e7d219ab570a43e5bdf.tar.xz
Make .bc en/decoding of AttrKind stable
The bitcode representation attribute kinds are encoded into / decoded from should be independent of the current set of LLVM attributes and their position in the AttrKind enum. This patch explicitly encodes attributes to fixed bitcode values. With this patch applied, LLVM does not silently misread attributes written by LLVM 3.3. We also enhance the decoding slightly such that an error message is printed if an unknown AttrKind encoding was dected. Bonus: Dropping bitcode attributes from AttrKind is now easy, as old AttrKinds do not need to be kept to support the Bitcode reader. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187186 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Bitcode')
-rw-r--r--test/Bitcode/attributes-3.3.ll236
-rw-r--r--test/Bitcode/attributes-3.3.ll.bcbin0 -> 1592 bytes
2 files changed, 236 insertions, 0 deletions
diff --git a/test/Bitcode/attributes-3.3.ll b/test/Bitcode/attributes-3.3.ll
new file mode 100644
index 0000000000..cd70ba1a74
--- /dev/null
+++ b/test/Bitcode/attributes-3.3.ll
@@ -0,0 +1,236 @@
+; RUN: llvm-dis < %s.bc| FileCheck %s
+
+; attributes-3.3.ll.bc was generated by passing this file to llvm-as-3.3.
+; The test checks that LLVM does not silently misread attributes of
+; older bitcode files.
+
+define void @f1(i8 zeroext)
+; CHECK: define void @f1(i8 zeroext)
+{
+ ret void;
+}
+
+define void @f2(i8 signext)
+; CHECK: define void @f2(i8 signext)
+{
+ ret void;
+}
+
+define void @f3() noreturn
+; CHECK: define void @f3() #0
+{
+ ret void;
+}
+
+define void @f4(i8 inreg)
+; CHECK: define void @f4(i8 inreg)
+{
+ ret void;
+}
+
+define void @f5(i8* sret)
+; CHECK: define void @f5(i8* sret)
+{
+ ret void;
+}
+
+define void @f6() nounwind
+; CHECK: define void @f6() #1
+{
+ ret void;
+}
+
+define void @f7(i8* noalias)
+; CHECK: define void @f7(i8* noalias)
+{
+ ret void;
+}
+
+define void @f8(i8* byval)
+; CHECK: define void @f8(i8* byval)
+{
+ ret void;
+}
+
+define void @f9(i8* nest)
+; CHECK: define void @f9(i8* nest)
+{
+ ret void;
+}
+
+define void @f10() readnone
+; CHECK: define void @f10() #2
+{
+ ret void;
+}
+
+define void @f11() readonly
+; CHECK: define void @f11() #3
+{
+ ret void;
+}
+
+define void @f12() noinline
+; CHECK: define void @f12() #4
+{
+ ret void;
+}
+
+define void @f13() alwaysinline
+; CHECK: define void @f13() #5
+{
+ ret void;
+}
+
+define void @f14() optsize
+; CHECK: define void @f14() #6
+{
+ ret void;
+}
+
+define void @f15() ssp
+; CHECK: define void @f15() #7
+{
+ ret void;
+}
+
+define void @f16() sspreq
+; CHECK: define void @f16() #8
+{
+ ret void;
+}
+
+define void @f17(i8 align 4)
+; CHECK: define void @f17(i8 align 4)
+{
+ ret void;
+}
+
+define void @f18(i8* nocapture)
+; CHECK: define void @f18(i8* nocapture)
+{
+ ret void;
+}
+
+define void @f19() noredzone
+; CHECK: define void @f19() #9
+{
+ ret void;
+}
+
+define void @f20() noimplicitfloat
+; CHECK: define void @f20() #10
+{
+ ret void;
+}
+
+define void @f21() naked
+; CHECK: define void @f21() #11
+{
+ ret void;
+}
+
+define void @f22() inlinehint
+; CHECK: define void @f22() #12
+{
+ ret void;
+}
+
+define void @f23() alignstack(4)
+; CHECK: define void @f23() #13
+{
+ ret void;
+}
+
+define void @f24() returns_twice
+; CHECK: define void @f24() #14
+{
+ ret void;
+}
+
+define void @f25() uwtable
+; CHECK: define void @f25() #15
+{
+ ret void;
+}
+
+define void @f26() nonlazybind
+; CHECK: define void @f26() #16
+{
+ ret void;
+}
+
+define void @f27() sanitize_address
+; CHECK: define void @f27() #17
+{
+ ret void;
+}
+define void @f28() sanitize_thread
+; CHECK: define void @f28() #18
+{
+ ret void;
+}
+define void @f29() sanitize_memory
+; CHECK: define void @f29() #19
+{
+ ret void;
+}
+
+define void @f30() "cpu"="cortex-a8"
+; CHECK: define void @f30() #20
+{
+ ret void;
+}
+
+define i8 @f31(i8 returned %A)
+; CHECK: define i8 @f31(i8 returned %A)
+{
+ ret i8 %A;
+}
+
+define void @f32() sspstrong
+; CHECK: define void @f32() #21
+{
+ ret void;
+}
+
+define void @f33() minsize
+; CHECK: define void @f33() #22
+{
+ ret void;
+}
+
+declare void @nobuiltin()
+
+define void @f34()
+; CHECK: define void @f34()
+{
+ call void @nobuiltin() nobuiltin
+; CHECK: call void @nobuiltin() #23
+ ret void;
+}
+
+; CHECK: attributes #0 = { noreturn }
+; CHECK: attributes #1 = { nounwind }
+; CHECK: attributes #2 = { readnone }
+; CHECK: attributes #3 = { readonly }
+; CHECK: attributes #4 = { noinline }
+; CHECK: attributes #5 = { alwaysinline }
+; CHECK: attributes #6 = { optsize }
+; CHECK: attributes #7 = { ssp }
+; CHECK: attributes #8 = { sspreq }
+; CHECK: attributes #9 = { noredzone }
+; CHECK: attributes #10 = { noimplicitfloat }
+; CHECK: attributes #11 = { naked }
+; CHECK: attributes #12 = { inlinehint }
+; CHECK: attributes #13 = { alignstack=4 }
+; CHECK: attributes #14 = { returns_twice }
+; CHECK: attributes #15 = { uwtable }
+; CHECK: attributes #16 = { nonlazybind }
+; CHECK: attributes #17 = { sanitize_address }
+; CHECK: attributes #18 = { sanitize_thread }
+; CHECK: attributes #19 = { sanitize_memory }
+; CHECK: attributes #20 = { "cpu"="cortex-a8" }
+; CHECK: attributes #21 = { sspstrong }
+; CHECK: attributes #22 = { minsize }
+; CHECK: attributes #23 = { nobuiltin }
diff --git a/test/Bitcode/attributes-3.3.ll.bc b/test/Bitcode/attributes-3.3.ll.bc
new file mode 100644
index 0000000000..5dd71864ea
--- /dev/null
+++ b/test/Bitcode/attributes-3.3.ll.bc
Binary files differ