Index: test/NaCl/PNaClABI/linkagetypes.ll |
diff --git a/test/NaCl/PNaClABI/linkagetypes.ll b/test/NaCl/PNaClABI/linkagetypes.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..005497a69f6d4ceea9cc432b863b61af02950778 |
--- /dev/null |
+++ b/test/NaCl/PNaClABI/linkagetypes.ll |
@@ -0,0 +1,78 @@ |
+; RUN: not pnacl-abicheck < %s | FileCheck %s |
+; Test linkage types allowed by PNaCl ABI |
+ |
+target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:32" |
+target triple = "le32-unknown-nacl" |
+ |
+ |
+@gv_internal = internal global [1 x i8] c"x" |
+; CHECK-NOT: disallowed |
+ |
+@gv_private = private global [1 x i8] c"x" |
+; CHECK: Variable gv_private has disallowed linkage type: private |
+@gv_linkonce = linkonce global [1 x i8] c"x" |
+; CHECK: gv_linkonce has disallowed linkage type: linkonce |
+@gv_linkonce_odr = linkonce_odr global [1 x i8] c"x" |
+; CHECK: gv_linkonce_odr has disallowed linkage type: linkonce_odr |
+@gv_weak = weak global [1 x i8] c"x" |
+; CHECK: gv_weak has disallowed linkage type: weak |
+@gv_weak_odr = weak_odr global [1 x i8] c"x" |
+; CHECK: gv_weak_odr has disallowed linkage type: weak_odr |
+@gv_common = common global [1 x i8] c"x" |
+; CHECK: gv_common has disallowed linkage type: common |
+@gv_appending = appending global [1 x i8] zeroinitializer |
+; CHECK: gv_appending has disallowed linkage type: appending |
+@gv_dllimport = external dllimport global [1 x i8] |
+; CHECK: gv_dllimport is not a valid external symbol (disallowed) |
+@gv_dllexport = dllexport global [1 x i8] c"x" |
+; CHECK: gv_dllexport is not a valid external symbol (disallowed) |
+@gv_extern_weak = extern_weak global [1 x i8] |
+; CHECK: gv_extern_weak has disallowed linkage type: extern_weak |
+@gv_available_externally = available_externally global [1 x i8] c"x" |
+; CHECK: gv_available_externally has disallowed linkage type: available_externally |
+ |
+ |
+; CHECK-NOT: disallowed |
+; CHECK-NOT: internal_func |
+; internal linkage is allowed, and should not appear in error output. |
+define internal void @internal_func() { |
+ ret void |
+} |
+ |
+; CHECK: Function private_func has disallowed linkage type: private |
+define private void @private_func() { |
+ ret void |
+} |
+; CHECK: Function external_func is declared but not defined (disallowed) |
+declare external void @external_func() |
+; CHECK: linkonce_func has disallowed linkage type: linkonce |
+define linkonce void @linkonce_func() { |
+ ret void |
+} |
+; CHECK-NEXT: linkonce_odr_func has disallowed linkage type: linkonce_odr |
+define linkonce_odr void @linkonce_odr_func() { |
+ ret void |
+} |
+; CHECK-NEXT: weak_func has disallowed linkage type: weak |
+define weak void @weak_func() { |
+ ret void |
+} |
+; CHECK-NEXT: weak_odr_func has disallowed linkage type: weak_odr |
+define weak_odr void @weak_odr_func() { |
+ ret void |
+} |
+; CHECK-NEXT: dllimport_func is declared but not defined (disallowed) |
+; CHECK-NEXT: dllimport_func is not a valid external symbol (disallowed) |
+declare dllimport void @dllimport_func() |
+; CHECK-NEXT: dllexport_func is not a valid external symbol (disallowed) |
+define dllexport void @dllexport_func() { |
+ ret void |
+} |
+; CHECK-NEXT: Function extern_weak_func is declared but not defined (disallowed) |
+; CHECK-NEXT: Function extern_weak_func has disallowed linkage type: extern_weak |
+declare extern_weak void @extern_weak_func() |
+ |
+; CHECK-NEXT: Function avail_ext_func has disallowed linkage type: available_externally |
+define available_externally void @avail_ext_func() { |
+ ret void |
+} |