xref: /llvm-project/llvm/test/CodeGen/X86/indirect-hidden.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; RUN: llc -mtriple=i686-apple-macosx -o - %s | FileCheck %s
2
3; x86 doesn't normally use indirect symbols, particularly hidden ones, but it
4; can be tricked into it for exception-handling typeids.
5
6@hidden_typeid = external hidden constant ptr
7@normal_typeid = external constant ptr
8
9declare void @throws()
10
11define void @get_indirect_hidden() personality ptr @__gxx_personality_v0 {
12  invoke void @throws() to label %end unwind label %lpad
13lpad:
14  %tmp = landingpad { ptr, i32 }
15          catch ptr @hidden_typeid
16  br label %end
17
18end:
19  ret void
20}
21
22define void @get_indirect() personality ptr @__gxx_personality_v0 {
23  invoke void @throws() to label %end unwind label %lpad
24lpad:
25  %tmp = landingpad { ptr, i32 }
26          catch ptr @normal_typeid
27  br label %end
28
29end:
30  ret void
31}
32
33declare i32 @__gxx_personality_v0(...)
34
35; CHECK: .section __IMPORT,__pointers,non_lazy_symbol_pointers
36
37; CHECK-NOT: __DATA,__data
38; CHECK: .indirect_symbol _hidden_typeid
39; CHECK-NEXT: .long 0
40
41; CHECK-NOT: __DATA,__data
42; CHECK: .indirect_symbol _normal_typeid
43; CHECK-NEXT: .long 0
44