Ë
    æÿæi?· ã                   ó†  — d dl Z d dlZd dl mZmZmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  e
j6                  «       d
k(  r ej8                  d«        ej:                  ej<                  dk(  dej<                  › �«      Z ej:                  ej<                  dk(  dej<                  › �«      Z dZ!	 d dl"Z"dZ! ej:                  e!d«      Z$d„ Z%dZ&dZ'dZ(dZ)dZ*dZ+dZ, e
jZ                  «       dk(  re,j]                  dd«      Z,dZ/dZ0d Z1d!Z2d"Z3d#Z4d$Z5d%Z6d&Z7d'Z8d(Z9d)Z:d*Z;d+Z<g d,¢Z=g d-¢Z>g d.¢Z?d/Z@d0ZAd1ZBd2ZCd3ZDd4ZEd5ZFd6ZGd7ZH G d8„ d9e«      ZI G d:„ d;eI«      ZJ G d<„ d=eI«      ZK G d>„ d?eI«      ZL G d@„ dAeI«      ZM G dB„ dCeN«      ZO G dD„ dEeO«      ZP G dF„ dGeIeP«      ZQ ej¤                  dH«       G dI„ dJeI«      «       ZS G dK„ dLeI«      ZT G dM„ dNeI«      ZU G dO„ dPeI«      ZV G dQ„ dReI«      ZW G dS„ dTeI«      ZX G dU„ dVeI«      ZY G dW„ dXeI«      ZZ G dY„ dZeI«      Z[ G d[„ d\eQ«      Z\ G d]„ d^eI«      Z] ej:                   e
j6                  «       j½                  d_«      d`«       G da„ dbeI«      «       Z_ G dc„ ddeI«      Z` G de„ dfeI«      Za G dg„ dheI«      Zb G di„ djeN«      Zc G dk„ dleIec«      Zd G dm„ dneIec«      Ze G do„ dpeIec«      Zf ej:                  e	jÎ                  jÑ                  dq«      dr«      e$ G ds„ dte«      «       «       Ziejduk(  r ejÖ                  «        yy# e#$ r Y �ŒYw xY w)vé    N)Ú	CFUNCTYPEÚc_intÚc_int32)Úfind_library)Úcontextmanager)Úmkstemp)Úir)Úbinding)Úffi)ÚTestCaseÚarmv7lzlibgcc_s.so.1Úcondazconda package test only, have Úwheelzwheel package test only, have FTztest needs py-lief packagec                  óª  — t        j                  t         j                  «      } 	 t        j                  t         j                  d«       	 t        j                  t         j                  | «       y# t         j                  $ r' Y t        j                  t         j                  | «       yw xY w# t        j                  t         j                  | «       w xY w)NÚde_DEFT)ÚlocaleÚ	setlocaleÚLC_ALLÚError)Úcurs    úp/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/llvmlite/tests/test_binding.pyÚno_de_localer   ,   s�   € Ü
×
Ñ
œ6Ÿ=™=Ó
)€Cð-Ü×ÑœŸ™¨Ô0ð ä×ÑœŸ™¨Õ,øô �<‰<ò Øô 	×ÑœŸ™¨Õ,ðûô
 	×ÑœŸ™¨Õ,ús#   ¥$A/ Á/B)ÂB, Â(B)Â)B, Â,&Caæ  
    ; ModuleID = '<string>'
    source_filename = "asm_sum.c"
    target triple = "{triple}"
    %struct.glob_type = type {{ i64, [2 x i64]}}
    %struct.glob_type_vec = type {{ i64, <2 x i64>}}

    @glob = global i32 0
    @glob_b = global i8 0
    @glob_f = global float 1.5
    @glob_struct = global %struct.glob_type {{i64 0, [2 x i64] [i64 0, i64 0]}}

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = add i32 %.1, %.2
      %.4 = add i32 0, %.3
      ret i32 %.4
    }}
    z 
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = add i32 %.1, %.2
      ret i32 %.3
    }}
    z×
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i64 @sum(i64 %.1, i64 %.2) {{
      %.3 = add i64 %.1, %.2
      %.4 = add i64 5, %.3
      %.5 = add i64 -5, %.4
      ret i64 %.5
    }}
    z¢
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i32 @sum(i32 %.1, i32 %.2) {{
        %.3 = add i32 %.1, %.2
        ret i32 0
    }}
    z½
    ; ModuleID = '<string>'
    target triple = "{triple}"
    @mul_glob = global i32 0

    define i32 @mul(i32 %.1, i32 %.2) {{
      %.3 = mul i32 %.1, %.2
      ret i32 %.3
    }}
    a  
    ; ModuleID = '<string>'
    target triple = "{triple}"
    @mul_glob = global i32 0

    declare i32 @sum(i32, i32)
    define i32 @square_sum(i32 %.1, i32 %.2) {{
      %.3 = call i32 @sum(i32 %.1, i32 %.2)
      %.4 = mul i32 %.3, %.3
      ret i32 %.4
    }}
    zÏ
    ; ModuleID = '<string>'
    target triple = "{triple}"

    declare i8* @Py_GetVersion()

    define void @getversion(i32 %.1, i32 %.2) {{
      %1 = call i8* @Py_GetVersion()
      ret void
    }}
    ÚPyPyÚPy_GetVersionÚPyPy_GetVersionz¡
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define i32 @sum(i32 %.1, i32 %.2) {{
      %.3 = fadd i32 %.1, %.2
      ret i32 %.3
    }}
    z�
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @sum() {{
      %.bug = add i32 1, %.bug
      ret void
    }}
    zh
    ; ModuleID = '<string>'
    target triple = "{triple}"

    declare i32 @sum(i32 %.1, i32 %.2)
    zg
    ; ModuleID = '<string>'
    target triple = "{triple}"

    declare i32 @vararg(i32 %.1, ...)
    zÔ
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo() {{
      %const = fadd fp128 0xLF3CB1CCF26FBC178452FB4EC7F91DEAD, 0xL00000000000000000000000000000001
      ret void
    }}
    z–
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo() {{
      %const = fadd double 0.0, 3.14
      ret void
    }}
    zœ
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo() {{
      call void asm sideeffect "nop", ""()
      ret void
    }}
    a�  
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @inlineme() {{
        ret void
    }}

    define i32 @caller(i32 %.1, i32 %.2) {{
    entry:
      %stack = alloca i32
      store i32 %.1, i32* %stack
      br label %main
    main:
      %loaded = load i32, i32* %stack
      %.3 = add i32 %loaded, %.2
      %.4 = add i32 0, %.3
      call void @inlineme()
      ret i32 %.4
    }}
aÉ  
; ModuleID = 'test.c'
source_filename = "test.c"
target triple = "{triple}"

; Function Attrs: noinline nounwind optnone ssp uwtable
define void @inlineme() noinline !dbg !15 {{
  ret void, !dbg !18
}}

; Function Attrs: noinline nounwind optnone ssp uwtable
define i32 @foo(i32 %0, i32 %1) !dbg !19 {{
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  store i32 %0, i32* %3, align 4
  call void @llvm.dbg.declare(metadata i32* %3, metadata !23, metadata !DIExpression()), !dbg !24
  store i32 %1, i32* %4, align 4
  call void @llvm.dbg.declare(metadata i32* %4, metadata !25, metadata !DIExpression()), !dbg !26
  call void @inlineme(), !dbg !27
  %5 = load i32, i32* %3, align 4, !dbg !28
  %6 = load i32, i32* %4, align 4, !dbg !29
  %7 = add nsw i32 %5, %6, !dbg !30
  ret i32 %7, !dbg !31
}}

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

attributes #1 = {{ nofree nosync nounwind readnone speculatable willreturn }}

!llvm.module.flags = !{{!1, !2, !3, !4, !5, !6, !7, !8, !9, !10}}
!llvm.dbg.cu = !{{!11}}
!llvm.ident = !{{!14}}

!0 = !{{i32 2, !"SDK Version", [2 x i32] [i32 12, i32 3]}}
!1 = !{{i32 7, !"Dwarf Version", i32 4}}
!2 = !{{i32 2, !"Debug Info Version", i32 3}}
!3 = !{{i32 1, !"wchar_size", i32 4}}
!4 = !{{i32 1, !"branch-target-enforcement", i32 0}}
!5 = !{{i32 1, !"sign-return-address", i32 0}}
!6 = !{{i32 1, !"sign-return-address-all", i32 0}}
!7 = !{{i32 1, !"sign-return-address-with-bkey", i32 0}}
!8 = !{{i32 7, !"PIC Level", i32 2}}
!9 = !{{i32 7, !"uwtable", i32 1}}
!10 = !{{i32 7, !"frame-pointer", i32 1}}
!11 = distinct !DICompileUnit(language: DW_LANG_C99, file: !12, producer: "Apple clang version 13.1.6 (clang-1316.0.21.2.3)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !13, splitDebugInlining: false, nameTableKind: None, sysroot: "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk", sdk: "MacOSX.sdk")
!12 = !DIFile(filename: "test.c", directory: "/")
!13 = !{{}}
!14 = !{{!"Apple clang version 13.1.6 (clang-1316.0.21.2.3)"}}
!15 = distinct !DISubprogram(name: "inlineme", scope: !12, file: !12, line: 1, type: !16, scopeLine: 1, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11, retainedNodes: !13)
!16 = !DISubroutineType(types: !17)
!17 = !{{null}}
!18 = !DILocation(line: 1, column: 22, scope: !15)
!19 = distinct !DISubprogram(name: "foo", scope: !12, file: !12, line: 3, type: !20, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !11, retainedNodes: !13)
!20 = !DISubroutineType(types: !21)
!21 = !{{!22, !22, !22}}
!22 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!23 = !DILocalVariable(name: "a", arg: 1, scope: !19, file: !12, line: 3, type: !22)
!24 = !DILocation(line: 3, column: 13, scope: !19)
!25 = !DILocalVariable(name: "b", arg: 2, scope: !19, file: !12, line: 3, type: !22)
!26 = !DILocation(line: 3, column: 20, scope: !19)
!27 = !DILocation(line: 4, column: 5, scope: !19)
!28 = !DILocation(line: 5, column: 12, scope: !19)
!29 = !DILocation(line: 5, column: 16, scope: !19)
!30 = !DILocation(line: 5, column: 14, scope: !19)
!31 = !DILocation(line: 5, column: 5, scope: !19)
aN  
; ModuleID = "<string>"
target triple = "{triple}"

define double @licm(i32 %0) {{
  %2 = alloca i32, align 4
  %3 = alloca double, align 8
  %4 = alloca i32, align 4
  %5 = alloca double, align 8
  store i32 %0, i32* %2, align 4
  store double 0.000000e+00, double* %3, align 8
  store i32 0, i32* %4, align 4
  br label %6

6:                                                ; preds = %14, %1
  %7 = load i32, i32* %4, align 4
  %8 = load i32, i32* %2, align 4
  %9 = icmp slt i32 %7, %8
  br i1 %9, label %10, label %17

10:                                               ; preds = %6
  store double 7.000000e+00, double* %5, align 8
  %11 = load double, double* %5, align 8
  %12 = load double, double* %3, align 8
  %13 = fadd double %12, %11
  store double %13, double* %3, align 8
  br label %14

14:                                               ; preds = %10
  %15 = load i32, i32* %4, align 4
  %16 = add nsw i32 %15, 1
  store i32 %16, i32* %4, align 4
  br label %6

17:                                               ; preds = %6
  %18 = load double, double* %3, align 8
  ret double %18
}}
a€  
    ; ModuleID = "<string>"
    target triple = "{triple}"

    @A = global i32 undef

    define void @ctor_A()
    {{
      store i32 10, i32* @A
      ret void
    }}

    define void @dtor_A()
    {{
      store i32 20, i32* @A
      ret void
    }}

    define i32 @foo()
    {{
      %.2 = load i32, i32* @A
      %.3 = add i32 %.2, 2
      ret i32 %.3
    }}

    @llvm.global_ctors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @ctor_A, i8* null}}]
    @llvm.global_dtors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @dtor_A, i8* null}}]
    aƒ  
    ; ModuleID = "<string>"
    target triple = "{triple}"

    @A = external global i32

    define void @ctor_A()
    {{
      store i32 10, i32* @A
      ret void
    }}

    define void @dtor_A()
    {{
      store i32 20, i32* @A
      ret void
    }}

    define i32 @foo()
    {{
      %.2 = load i32, i32* @A
      %.3 = add i32 %.2, 2
      ret i32 %.3
    }}

    @llvm.global_ctors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @ctor_A, i8* null}}]
    @llvm.global_dtors = appending global [1 x {{i32, void ()*, i8*}}] [{{i32, void ()*, i8*}} {{i32 0, void ()* @dtor_A, i8* null}}]
    z…; ModuleID = ""
target triple = "unknown-unknown-unknown"
target datalayout = ""

define i32 @"foo"()
{
"<>!*''#":
  ret i32 12345
}
zÆ
    ; ModuleID = '<string>'
    target triple = "{triple}"

    define void @foo(i64* %.1) {{
      ret void
    }}

    define void @bar() {{
      call void @foo(i64* null)
      ret void
    }}
)úaddi	sp, sp, -16zsw	a1, 8(sp)zsw	a2, 12(sp)úfld	fa5, 8(sp)zfmv.w.x	fa4, a0zfcvt.d.s	fa4, fa4úfadd.d	fa5, fa4, fa5úfsd	fa5, 8(sp)úlw	a0, 8(sp)úlw	a1, 12(sp)úaddi	sp, sp, 16Úret)r   zsw	a0, 8(sp)zsw	a1, 12(sp)r   zfcvt.d.s	fa4, fa0r   r   r    r!   r"   r#   )zfcvt.d.s	fa5, fa0zfadd.d	fa0, fa5, fa1r#   zc
declare void @a_readonly_func(i8 *) readonly

declare i8* @a_arg0_return_func(i8* returned, i32*)
a*  
define double @foo(i32 %i, double %j) optnone noinline {
    %I = alloca i32		; <i32*> [#uses=4]
    %J = alloca double		; <double*> [#uses=2]
    store i32 %i, i32* %I
    store double %j, double* %J
    %t1 = load i32, i32* %I		; <i32> [#uses=1]
    %t2 = add i32 %t1, 1		; <i32> [#uses=1]
    store i32 %t2, i32* %I
    %t3 = load i32, i32* %I		; <i32> [#uses=1]
    %t4 = sitofp i32 %t3 to double		; <double> [#uses=1]
    %t5 = load double, double* %J		; <double> [#uses=1]
    %t6 = fmul double %t4, %t5		; <double> [#uses=1]
    ret double %t6
}
z#
declare void @test_declare(i32* )
Á@  7f454c4602010100000000000000000001003e000100000000000000000000000000000000000000e0000000000000000000000040000000000040000500010048c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8000000000000000000000000000000000000000000000000002f0000000400f1ff00000000000000000000000000000000070000001200020000000000000000001f00000000000000002e74657874005f5f617279626f002e6e6f74652e474e552d737461636b002e737472746162002e73796d746162003c737472696e673e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f0000000300000000000000000000000000000000000000a800000000000000380000000000000000000000000000000100000000000000000000000000000001000000010000000600000000000000000000000000000040000000000000001f000000000000000000000000000000100000000000000000000000000000000f00000001000000000000000000000000000000000000005f00000000000000000000000000000000000000000000000100000000000000000000000000000027000000020000000000000000000000000000000000000060000000000000004800000000000000010000000200000008000000000000001800000000000000Ú>48c1e2204809c24889d048c1c03d4831d048b90120000480001070480fafc8ay  
; ModuleID = '<lambda>'
source_filename = "<string>"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"

declare float @llvm.exp2.f32(float %casted)

define float @foo(i16 %arg) {
entry:
  %casted = sitofp i16 %arg to float
  %ret = call float @llvm.exp2.f32(float %casted)
  ret float %ret
}
aª  
; ModuleID = '<string>'
target triple = "{triple}"

define void @foo(i32 %N) {{
  ; unnamed block for testing
  %cmp4 = icmp sgt i32 %N, 0
  br i1 %cmp4, label %for.body, label %for.cond.cleanup

for.cond.cleanup:
  ret void

for.body:
  %i.05 = phi i32 [ %inc, %for.body ], [ 0, %0 ]
  %inc = add nuw nsw i32 %i.05, 1
  %exitcond.not = icmp eq i32 %inc, %N
  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
}}
aw  
; Source C++
;-----------------------------------------
; class MyClass;
;
; class MyClassDefined{
;     MyClass *member;
;     MyClass *m2;
;     MyClass *m3;
; };
;
; void foo(MyClass *c, MyClassDefined){ }
;-----------------------------------------
; LLVM-IR by: clang -arch arm64 -S -emit-llvm file.cpp
; ModuleID = 'file.cpp'
source_filename = "class.cpp"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx13.3.0"

%class.MyClass = type opaque
%class.MyClassDefined = type { %class.MyClass*, %class.MyClass*, %class.MyClass* }

; Function Attrs: noinline nounwind optnone ssp uwtable(sync)
define void @_Z3fooP7MyClass14MyClassDefined(%class.MyClass* noundef %0, %class.MyClassDefined* noundef %1) {
  %3 = alloca %class.MyClass*, align 8
  store %class.MyClass* %0, %class.MyClass** %3, align 8
  ret void
}

!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8}
!llvm.ident = !{!9}

!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 13, i32 3]}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{i32 8, !"branch-target-enforcement", i32 0}
!3 = !{i32 8, !"sign-return-address", i32 0}
!4 = !{i32 8, !"sign-return-address-all", i32 0}
!5 = !{i32 8, !"sign-return-address-with-bkey", i32 0}
!6 = !{i32 7, !"PIC Level", i32 2}
!7 = !{i32 7, !"uwtable", i32 1}
!8 = !{i32 7, !"frame-pointer", i32 1}
!9 = !{!"Apple clang version 14.0.3 (clang-1403.0.22.14.1)"}

a  ; Source C++
;-----------------------------------------

; struct Vector2D{
;     float x, y;
; };
;
; void foo(Vector2D vec, Vector2D *out) {
;     *out = vec;
; }
;-----------------------------------------
; LLVM-IR by: clang -arch x86_64 -S -emit-llvm file.cpp
; ModuleID = 'file.cpp'
source_filename = "class.cpp"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx13.3.0"

%struct.Vector2D = type { float, float }

; Function Attrs: noinline nounwind optnone ssp uwtable
define void @_Z3foo8Vector2DPS_(<2 x float> %0, %struct.Vector2D* noundef %1) #0 {
  %3 = alloca %struct.Vector2D, align 4
  %4 = alloca %struct.Vector2D*, align 8
  %5 = bitcast %struct.Vector2D* %3 to <2 x float>*
  store <2 x float> %0, <2 x float>* %5, align 4
  store %struct.Vector2D* %1, %struct.Vector2D** %4, align 8
  %6 = load %struct.Vector2D*, %struct.Vector2D** %4, align 8
  %7 = bitcast %struct.Vector2D* %6 to i8*
  %8 = bitcast %struct.Vector2D* %3 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %7, i8* align 4 %8, i64 8, i1 false)
  ret void
}

; Function Attrs: argmemonly nofree nounwind willreturn
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #1

attributes #0 = { noinline nounwind optnone ssp uwtable "darwin-stkchk-strong-link" "frame-pointer"="all" "min-legal-vector-width"="64" "no-trapping-math"="true" "probe-stack"="___chkstk_darwin" "stack-protector-buffer-size"="8" "target-cpu"="penryn" "target-features"="+cx16,+cx8,+fxsr,+mmx,+sahf,+sse,+sse2,+sse3,+sse4.1,+ssse3,+x87" "tune-cpu"="generic" }
attributes #1 = { argmemonly nofree nounwind willreturn }

!llvm.module.flags = !{!0, !1, !2, !3, !4}
!llvm.ident = !{!5}

!0 = !{i32 2, !"SDK Version", [2 x i32] [i32 13, i32 3]}
!1 = !{i32 1, !"wchar_size", i32 4}
!2 = !{i32 7, !"PIC Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{i32 7, !"frame-pointer", i32 2}
!5 = !{!"Apple clang version 14.0.3 (clang-1403.0.22.14.1)"}

c                   ó2   — e Zd Zd„ Zd„ Zedfd„Zdd„Zd„ Zy)ÚBaseTestc                 óÒ   — t        j                  «        t        j                  «        t        j                  «        t        j
                  d d  | _        g t        j
                  d d  y ©N)ÚllvmÚinitialize_native_targetÚinitialize_native_asmprinterÚgcÚcollectÚgarbageÚold_garbage©Úselfs    r   ÚsetUpzBaseTest.setUpŸ  s@   € Ü×%Ñ%Ô'Ü×)Ñ)Ô+Ü
�
‰
ŒÜŸ:™:¡a˜=ˆÔØŒ�
‰
‘1‰ó    c                 óp   — t        j                  «        | j                  t         j                  g «       | `y r)   )r-   r.   ÚassertEqualr/   r0   r1   s    r   ÚtearDownzBaseTest.tearDown¦  s'   € ô 	�
‰
ŒØ×ÑœŸ™ RÔ(àÑr4   Nc                 óz   — |j                  t        j                  «       ¬«      }t        j                  ||«      }|S )N©Útriple)Úformatr*   Úget_default_tripleÚparse_assembly)r2   ÚasmÚcontextÚmods       r   ÚmodulezBaseTest.module¯  s2   € Ø�j‰j¤× 7Ñ 7Ó 9ˆjÓ:ˆÜ×!Ñ! # wÓ/ˆØˆ
r4   c                 óH   — |€| j                  «       }|j                  |«      S r)   )rA   Úget_global_variable)r2   Únamer@   s      r   ÚglobzBaseTest.glob´  s#   € Øˆ;Ø—+‘+“-ˆCØ×&Ñ& tÓ,Ð,r4   c                ób   — t         j                  j                  «       }|j                  |¬«      S )N©Újit)r*   ÚTargetÚfrom_default_tripleÚcreate_target_machine)r2   rH   Útargets      r   Útarget_machinezBaseTest.target_machine¹  s(   € Ü—‘×0Ñ0Ó2ˆØ×+Ñ+°Ð+Ó4Ð4r4   )rE   N)	Ú__name__Ú
__module__Ú__qualname__r3   r7   Úasm_sumrA   rE   rM   © r4   r   r'   r'   �  s"   „ òòð !¨$ó ó
-ó
5r4   r'   c                   óÒ   — e Zd ZdZ ej
                  ej                  j                  d«      d«       ej
                  e	j                  j                  d«      d«      d„ «       «       Zy)ÚTestDependencieszB
    Test DLL dependencies are within a certain expected set.
    ÚlinuxzLinux-specific testÚLLVMLITE_DIST_TESTúDistribution-specific testc                 ó@  — t         j                  j                  }t        j                  j                  «       }d|d<   t        j                  dd|gt        j                  |¬«      }|j                  «       \  }}| j                  d|j                  «       t        j                  d«      }t        «       }|j                  «       j!                  «       D ]x  }|j#                  «       }	|	sŒ|	d   dk(  sŒ|	d	   }
|j%                  |
«      }t'        |	«      d
k7  s|s| j)                  d|›�«       |j+                  |j-                  d	«      «       Œz d|vsd|vr| j)                  d|›�«       t        g d¢«      }t/        j0                  «       dk(  r|j+                  d«       g }|D ]*  }
|
j3                  d«      rŒ|
|vsŒ|j5                  |
«       Œ, t'        |«      d	k(  r| j)                  d|d   ›d|›�«       y t'        |«      d	kD  r| j)                  d|›d|›�«       y y )NÚCÚLANGÚobjdumpz-p)ÚstdoutÚenvr   z%^([+-_a-zA-Z0-9]+)\.so(?:\.\d+){0,3}$ÚNEEDEDé   é   zinvalid NEEDED line: ÚlibcÚ
libpthreadz!failed parsing dependencies? got )ÚlibrtÚlibdlrb   ÚlibzÚlibmÚlibgcc_sra   zld-linuxÚld64Úlibzstdz	libstdc++r   Úlibtinfoz	ld-linux-zunexpected dependency z in zunexpected dependencies )r   ÚlibÚ_nameÚosÚenvironÚcopyÚ
subprocessÚPopenÚPIPEÚcommunicater6   Ú
returncodeÚreÚcompileÚsetÚdecodeÚ
splitlinesÚsplitÚmatchÚlenÚfailÚaddÚgroupÚplatformÚpython_implementationÚ
startswithÚappend)r2   Úlib_pathr]   ÚpÚoutÚ_Úlib_patÚdepsÚlineÚpartsÚdepÚmÚallowedÚfailss                 r   Ú
test_linuxzTestDependencies.test_linuxÃ  s»  € ô
 —7‘7—=‘=ˆÜ�j‰j�o‰oÓˆØˆˆF‰Ü×Ñ˜i¨¨xÐ8Ü$.§O¡O¸ô>ˆà—‘“‰ˆˆQØ×Ñ˜˜AŸL™LÔ)ä—*‘*ÐEÓFˆÜ‹uˆØ—J‘J“L×+Ñ+Ö-ˆDØ—J‘J“LˆEÚ˜˜q™ XÓ-Ø˜A‘h�Ø—M‘M #Ó&�Ü�u“: ’?©!Ø—I’I¹4ÐAÔBØ—‘˜Ÿ™ ›Õ$ð .ð ˜Ñ °TÑ!9Ø�IŠI¹tÐEÔFäò $ó %ˆô ×)Ñ)Ó+¨vÒ5Ø�K‰K˜
Ô#àˆÛˆCØ—>‘> +Õ.°3¸gÒ3EØ—‘˜SÕ!ð ô ˆu‹:˜Š?Ø�IŠI¸%À»(ÁDÐIÕJÜ�‹Z˜!Š^Ø�IŠIºEÁ4ÐHÕIàr4   N)rN   rO   rP   Ú__doc__ÚunittestÚ
skipUnlessÚsysr€   r‚   rm   rn   Úgetr�   rR   r4   r   rT   rT   ¾  sd   „ ñð €X×Ñ˜Ÿ™×0Ñ0°Ó9Ø.ó0à€X×Ñ˜Ÿ™Ÿ™Ð(<Ó=Ø5ó7ñ&ó7ó0ñ&r4   rT   c                   óP   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zˆ xZS )ÚTestRISCVABIz`
    Test calling convention of floating point arguments of RISC-V
    using different ABI.
    zriscv32-unknown-linuxc                 ór   •— t         ‰| �  «        t        j                  «        t        j                  «        y r)   )Úsuperr3   r*   Úinitialize_all_targetsÚinitialize_all_asmprinters)r2   Ú	__class__s    €r   r3   zTestRISCVABI.setUp÷  s$   ø€ Ü‰‰ŒÜ×#Ñ#Ô%Ü×'Ñ'Õ)r4   c                 óÆ   — 	 t         j                  j                  | j                  «       y # t        $ r+}dt        |«      v r| j                  d«       n|‚Y d }~y d }~ww xY w)Nz/No available targets are compatible with triplez(RISCV target unsupported by linked LLVM.)r*   rI   Úfrom_tripler:   ÚRuntimeErrorÚstrÚskipTest)r2   Úes     r   Úcheck_riscv_targetzTestRISCVABI.check_riscv_targetü  sQ   € ð	Ü�K‰K×#Ñ# D§K¡KÕ0øÜò 	Ø@ÄCÈÃFÑJØ—‘ÐHÕIà�ô Jûð	ús   ‚), ¬	A µ!AÁA c                 óx   — t         j                  j                  | j                  «      } |j                  di |¤ŽS )NrR   )r*   rI   rž   r:   rK   )r2   ÚkwargÚlltargets      r   Úriscv_target_machinez!TestRISCVABI.riscv_target_machine  s0   € Ü—;‘;×*Ñ*¨4¯;©;Ó7ˆØ-ˆx×-Ñ-Ñ6°Ñ6Ð6r4   c                 ó  — t        j                  «       }t        j                  «       }t        j                  |||f«      }t        j                  «       }t        j
                  ||d¬«      }|j                  «       }t        j                  |«      }|j                  \  }}	|j                  ||«      }
|j                  |
|	«      }|j                  |«       t        j                  t        |«      «      }|j                  «        |S )NÚfpadd©rD   )r	   Ú
DoubleTypeÚ	FloatTypeÚFunctionTypeÚModuleÚFunctionÚappend_basic_blockÚ	IRBuilderÚargsÚfpextÚfaddr#   r*   r=   r    Úverify)r2   Úf64Úf32ÚfntyrA   ÚfuncÚblockÚbuilderÚaÚbÚarg0ÚresultÚllmods                r   Úfpadd_ll_modulezTestRISCVABI.fpadd_ll_module	  sÀ   € Ü�m‰m‹oˆÜ�l‰l‹nˆÜ�‰˜s S¨# JÓ/ˆÜ—‘“ˆÜ�{‰{˜6 4¨gÔ6ˆØ×'Ñ'Ó)ˆÜ—,‘,˜uÓ%ˆØ�y‰y‰ˆˆ1Ø�}‰}˜Q Ó$ˆØ—‘˜d AÓ&ˆØ�‰�FÔä×#Ñ#¤C¨£KÓ0ˆØ�‰ŒØˆr4   c                 óÊ   — g }|j                  «       D ]M  }|j                  «       }|j                  d«      rŒ%|j                  d«      rŒ7|dk(  rŒ=|j                  |«       ŒO |S )NÚ.r©   Ú )ry   Ústripr‚   rƒ   )r2   r>   Úasm_listrŠ   Ús_lines        r   Úbreak_up_asmzTestRISCVABI.break_up_asm  sX   € ØˆØ—N‘NÖ$ˆDØ—Z‘Z“\ˆFØ×%Ñ% cÕ*¨f×.?Ñ.?ÀÕ.HØ “|Ø—‘ Õ'ð	 %ð
 ˆr4   c                 óÒ   — | j                  «        | j                  «       }| j                  dd¬«      }| j                  | j	                  |j                  |«      «      t        «       y )Nú+f,+dÚilp32©ÚfeaturesÚabiname)r£   rÁ   r§   r6   rÈ   Úemit_assemblyÚriscv_asm_ilp32©r2   rÀ   rL   s      r   Útest_rv32d_ilp32zTestRISCVABI.test_rv32d_ilp32#  sZ   € Ø×ÑÔ!Ø×$Ñ$Ó&ˆØ×*Ñ*°GÀWÐ*ÓMˆØ×Ñ˜×*Ñ*¨6×+?Ñ+?ÀÓ+FÓGÜ(õ	*r4   c                 óÒ   — | j                  «        | j                  «       }| j                  dd¬«      }| j                  | j	                  |j                  |«      «      t        «       y )NrÊ   Úilp32frÌ   )r£   rÁ   r§   r6   rÈ   rÏ   Úriscv_asm_ilp32frÑ   s      r   Útest_rv32d_ilp32fzTestRISCVABI.test_rv32d_ilp32f*  óZ   € Ø×ÑÔ!Ø×$Ñ$Ó&ˆØ×*Ñ*°GÀXÐ*ÓNˆØ×Ñ˜×*Ñ*¨6×+?Ñ+?ÀÓ+FÓGÜ)õ	+r4   c                 óÒ   — | j                  «        | j                  «       }| j                  dd¬«      }| j                  | j	                  |j                  |«      «      t        «       y )NrÊ   Úilp32drÌ   )r£   rÁ   r§   r6   rÈ   rÏ   Úriscv_asm_ilp32drÑ   s      r   Útest_rv32d_ilp32dzTestRISCVABI.test_rv32d_ilp32d1  r×   r4   )rN   rO   rP   r‘   r:   r3   r£   r§   rÁ   rÈ   rÒ   rÖ   rÛ   Ú__classcell__)rœ   s   @r   r—   r—   ð  s7   ø„ ñð %€Fô*ò
ò7òò"ò*ò+ö+r4   r—   c                   ó¦   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Z ej&                   e«       d«      d„ «       Zd„ Zy)ÚTestMiscz7
    Test miscellaneous functions in llvm.binding.
    c                 ó.   — | j                  t        «       y r)   )rA   rQ   r1   s    r   Útest_parse_assemblyzTestMisc.test_parse_assembly>  s   € Ø�‰”GÕr4   c                 óô   — | j                  t        «      5 }| j                  t        «       d d d «       t	        j
                  «      }| j                  d|«       | j                  d|«       y # 1 sw Y   ŒCxY w)Nzparsing errorzinvalid operand type)ÚassertRaisesrŸ   rA   Úasm_parse_errorr    Ú	exceptionÚassertIn)r2   ÚcmÚss      r   Útest_parse_assembly_errorz"TestMisc.test_parse_assembly_errorA  sW   € Ø×Ñœ|Ô,°Ø�K‰KœÔ(÷ -ä�—‘ÓˆØ�‰�o qÔ)Ø�‰Ð,¨aÕ0÷	 -Ð,ús   –A.Á.A7c                 ó¨  — t        j                  «       }t        j                  t        j                  d«      g «      }t        j                  ||d«      }t        j
                  |j                  d¬«      «      }|j                  t        j                  t        j                  d«      d«      «       t        |«      }| j                  |t        «       y )Né    Úfooz<>!*''#rª   i90  )r	   r®   r­   ÚIntTyper¯   r±   r°   r#   ÚConstantr    r6   Úasm_nonalphanum_blocklabel)r2   r@   ÚftÚfnÚbdr>   s         r   Útest_nonalphanum_block_namez$TestMisc.test_nonalphanum_block_nameH  sŒ   € Ü�i‰i‹kˆÜ�_‰_œRŸZ™Z¨›^¨RÓ0ˆÜ�[‰[˜˜b %Ó(ˆÜ�\‰\˜"×/Ñ/°YÐ/Ó?Ó@ˆØ
�‰Œr�{‰{œ2Ÿ:™: b›>¨5Ó1Ô2Ü�#‹hˆØ×Ñ˜Ô8Õ9r4   c                 óŠ   — t         j                  j                  «       }t         j                  j                  «       }||k(  sJ ‚y r)   )r*   r?   Úget_global_context)r2   Ú	gcontext1Ú	gcontext2s      r   Útest_global_contextzTestMisc.test_global_contextQ  s4   € Ü—L‘L×3Ñ3Ó5ˆ	Ü—L‘L×3Ñ3Ó5ˆ	Ø˜IÒ%Ð%Ñ%r4   c                 óø   — t        j                  dd«       t        j                  dd«       t        j                  d«      }| j                  |d«       t        j                  d«      }| j	                  |d «       y )NÚ__xyzzyéÒ  i.  Ú__foobar)r*   Ú
add_symbolÚaddress_of_symbolr6   ÚassertIs)r2   Úaddrs     r   Útest_dylib_symbolszTestMisc.test_dylib_symbolsV  s\   € Ü�‰˜	 4Ô(Ü�‰˜	 4Ô(Ü×%Ñ% iÓ0ˆØ×Ñ˜˜tÔ$Ü×%Ñ% jÓ1ˆØ�‰�d˜DÕ!r4   c                 óz   — t        j                  «       }| j                  |t        «       | j	                  |«       y r)   )r*   r<   ÚassertIsInstancer    Ú
assertTrue)r2   r:   s     r   Útest_get_default_triplez TestMisc.test_get_default_triple^  s,   € Ü×(Ñ(Ó*ˆØ×Ñ˜f¤cÔ*Ø�‰˜Õr4   c                 ó4  — d„ }t        j                  «       }t        j                  «       }| j                  |t        «       | j                  |«        ||j                  d«      d   «      } ||j                  d«      d   «      }| j                  ||«       y )Nc                 ó   — | dk(  ry| S )NÚpowerpc64leÚppc64lerR   )Úarchs    r   Únormalize_ppcz7TestMisc.test_get_process_triple.<locals>.normalize_ppce  s   € Ø�}Ò$Ø à�r4   Ú-r   )r*   Úget_process_tripler<   r  r    r  rz   r6   )r2   r
  r:   ÚdefaultÚdefault_archÚtriple_archs         r   Útest_get_process_triplez TestMisc.test_get_process_triplec  s�   € ò	ô ×(Ñ(Ó*ˆÜ×)Ñ)Ó+ˆØ×Ñ˜f¤cÔ*Ø�‰˜Ôá$ W§]¡]°3Ó%7¸Ñ%:Ó;ˆÙ# F§L¡L°Ó$5°aÑ$8Ó9ˆà×Ñ˜ {Õ3r4   c                 óR  — t        j                  «       }| j                  |t        «       | j                  |t         j                  «       |j                  «       D ]B  \  }}| j                  |t        «       | j                  |«       | j                  |t        «       ŒD | j                  |j                  «       t        «       d}dj                  |«      }| j                  t        j                  |d«      «       | j                  t        j                  |d«      «       | j                  t        j                  |d«      «       t        |«      dk(  r!| j                  |j                  «       d«       y | j                  t        j                  ||j                  «       «      «       y )Nz[+\-][a-zA-Z0-9\._-]+z^({0}|{0}(,{0})*)?$rÄ   z+aaz+a,-bbr   )r*   Úget_host_cpu_featuresr  ÚdictÚ
FeatureMapÚitemsr    r  ÚboolÚflattenr;   ÚassertIsNotNoneru   r{   r|   r6   )r2   rÍ   ÚkÚvÚre_termÚregexs         r   Útest_get_host_cpu_featuresz#TestMisc.test_get_host_cpu_featuresu  s7  € Ü×-Ñ-Ó/ˆà×Ñ˜h¬Ô-Ø×Ñ˜h¬¯©Ô8Ø—N‘NÖ$‰DˆAˆqØ×!Ñ! !¤SÔ)Ø�O‰O˜AÔØ×!Ñ! !¤TÕ*ð %ð 	×Ñ˜h×.Ñ.Ó0´#Ô6à*ˆØ&×-Ñ-¨gÓ6ˆà×ÑœRŸX™X e¨RÓ0Ô1Ø×ÑœRŸX™X e¨UÓ3Ô4Ø×ÑœRŸX™X e¨XÓ6Ô7äˆx‹=˜AÒØ×Ñ˜X×-Ñ-Ó/°Õ4à× Ñ ¤§¡¨%°×1AÑ1AÓ1CÓ!DÕEr4   c                 óz   — t        j                  «       }| j                  |t        «       | j	                  |«       y r)   )r*   Úget_host_cpu_namer  r    r  )r2   Úcpus     r   Útest_get_host_cpu_namezTestMisc.test_get_host_cpu_nameŒ  s,   € Ü×$Ñ$Ó&ˆØ×Ñ˜c¤3Ô'Ø�‰˜Õr4   c                 óT   — d}t        j                  t        j                  d|g«       y )Na  if 1:
            from llvmlite import binding as llvm

            llvm.initialize_native_target()
            llvm.initialize_native_asmprinter()
            llvm.initialize_all_targets()
            llvm.initialize_all_asmprinters()
            llvm.shutdown()
            ú-c©rp   Ú
check_callr”   Ú
executable©r2   Úcodes     r   Útest_initfinizTestMisc.test_initfini‘  s$   € ðˆô 	×ÑœsŸ~™~¨t°TÐ:Õ;r4   c                 óˆ   — d}| j                  t        |¬«      5  t        j                  «        d d d «       y # 1 sw Y   y xY w)Nz-llvmlite.binding.initialize\(\) is deprecated)Úexpected_regex)ÚassertRaisesRegexrŸ   r*   Ú
initialize)r2   r  s     r   Útest_deprecated_initzTestMisc.test_deprecated_init�  s1   € Ø@ˆØ×#Ñ#¤LÀÐ#ÕGÜ�O‰OÔ÷ H×GÑGús	   š8¸Ac                 óT   — d}t        j                  t        j                  d|g«       y )Nz„if 1:
            from llvmlite import binding as llvm

            llvm.set_option("progname", "-debug-pass=Disabled")
            r#  r$  r'  s     r   Útest_set_optionzTestMisc.test_set_option¢  s$   € ðˆô
 	×ÑœsŸ~™~¨t°TÐ:Õ;r4   c                 óŠ   — t         j                  \  }}}d}| j                  ||«       | j                  |t        d«      «       y )N)é   é	   )r*   Úllvm_version_inforå   Úrange)r2   ÚmajorÚminorÚpatchÚvalids        r   Útest_versionzTestMisc.test_version¬  s9   € Ü"×4Ñ4Ñˆˆu�eàˆØ�‰�e˜UÔ#Ø�‰�eœU 1›XÕ&r4   c                 ó,   — t        j                  «        y r)   )r*   Úcheck_jit_executionr1   s    r   Útest_check_jit_executionz!TestMisc.test_check_jit_execution³  s   € Ü× Ñ Õ"r4   zLocale not availablec                 óÆ   — | j                  t        «      }t        |«      }t        j                  t        j
                  d«       t        |«      }| j                  ||«       y )Nr   )rA   Úasm_double_localer    r   r   r   r6   )r2   r�   ÚexpectÚgots       r   Útest_print_double_localez!TestMisc.test_print_double_locale¶  sI   € à�K‰KÔ)Ó*ˆÜ�Q“ˆô 	×ÑœŸ™¨Ô0ä�!‹fˆà×Ñ˜ Õ%r4   c                 ó^   — d}d}t         j                  |d|g}t        j                  |«       y )Nzfrom llvmlite import bindingz-Werrorr#  )r”   r&  rp   r%  )r2   r(  ÚflagsÚcmdargss       r   Útest_no_accidental_warningsz$TestMisc.test_no_accidental_warningsÂ  s,   € Ø-ˆØˆÜ—>‘> 5¨$°Ð5ˆÜ×Ñ˜gÕ&r4   N)rN   rO   rP   r‘   rà   rè   rò   r÷   r   r  r  r  r!  r)  r.  r0  r:  r=  r’   ÚskipIfr   rB  rF  rR   r4   r   rÞ   rÞ   9  sw   „ ñòò1ò:ò&ò
"ò ò
4ò$Fò.ò

<òò
<ò'ò#ð €X‡_�_‘\“^Ð%;Ó<ñ	&ó =ð	&ó'r4   rÞ   c                   óŠ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestModuleRefc                 ó˜   — | j                  «       }t        |«      j                  «       }| j                  |j	                  d«      |«       y )Nz; ModuleID =)rA   r    rÅ   r  r‚   ©r2   r@   rç   s      r   Útest_strzTestModuleRef.test_strË  s4   € Ø�k‰k‹mˆÜ�‹H�N‰NÓˆØ�‰˜Ÿ™ ^Ó4°aÕ8r4   c                 óø   — | j                  «       }t        |«       |j                  «        | j                  t        j
                  «      5  t        |«       d d d «       |j                  «        y # 1 sw Y   ŒxY wr)   )rA   r    Úcloserâ   ÚctypesÚArgumentError©r2   r@   s     r   Ú
test_closezTestModuleRef.test_closeÐ  sO   € Ø�k‰k‹mˆÜˆCŒØ�	‰	ŒØ×Ñœv×3Ñ3Õ4Ü�ŒH÷ 5à�	‰	�÷ 5Ð4ús   ÁA0Á0A9c                 ó€  — | j                  «       }t        |«       |5  t        |«       d d d «       | j                  t        j                  «      5  t        |«       d d d «       | j                  t
        «      5  |5  	 d d d «       d d d «       y # 1 sw Y   ŒgxY w# 1 sw Y   Œ@xY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY wr)   )rA   r    râ   rO  rP  rŸ   rQ  s     r   Ú	test_withzTestModuleRef.test_withØ  s„   € Ø�k‰k‹mˆÜˆCŒÚÜ�ŒH÷ à×Ñœv×3Ñ3Õ4Ü�ŒH÷ 5à×Ñœ|Õ,ÚØ÷ ÷ -Ð,÷	 ˆSúç4Ð4ú÷ �ú÷ -Ð,ús;   žBÁBÁ:B4Á=B(Á?B4ÂBÂB%Â(B1	Â-B4Â4B=c                 ó°   — | j                  «       }d|_        | j                  |j                  d«       d|_        | j                  |j                  d«       y )Nrë   Úbar)rA   rD   r6   rQ  s     r   Ú	test_namezTestModuleRef.test_nameã  sC   € Ø�k‰k‹mˆØˆŒØ×Ñ˜Ÿ™ 5Ô)ØˆŒØ×Ñ˜Ÿ™ 5Õ)r4   c                 ó\   — | j                  «       }| j                  |j                  d«       y )Nz	asm_sum.c)rA   r6   Úsource_filerQ  s     r   Útest_source_filezTestModuleRef.test_source_fileê  s!   € Ø�k‰k‹mˆØ×Ñ˜Ÿ™¨+Õ6r4   c                 ó®   — | j                  «       }|j                  }| j                  |t        «       ||_        | j	                  ||j                  «       y r)   )rA   Údata_layoutr  r    r6   rK  s      r   Útest_data_layoutzTestModuleRef.test_data_layoutî  sA   € Ø�k‰k‹mˆØ�O‰OˆØ×Ñ˜a¤Ô%ØˆŒØ×Ñ˜˜CŸO™OÕ,r4   c                 óÊ   — | j                  «       }|j                  }| j                  |t        j                  «       «       d|_        | j                  |j                  d«       y )NrÄ   )rA   r:   r6   r*   r<   rK  s      r   Útest_triplezTestModuleRef.test_tripleõ  sJ   € Ø�k‰k‹mˆØ�J‰JˆØ×Ñ˜œD×3Ñ3Ó5Ô6ØˆŒ
Ø×Ñ˜Ÿ™ RÕ(r4   c                 óP  — | j                  «       }| j                  |j                  «       d «       | j                  t        «      }| j	                  t
        «      5 }|j                  «        d d d «       t        j                  «      }| j                  d|«       y # 1 sw Y   Œ1xY w)Nz%.bug = add i32 1, %.bug)	rA   rþ   rµ   Úasm_verification_failrâ   rŸ   r    rä   rå   )r2   r@   ræ   rç   s       r   Útest_verifyzTestModuleRef.test_verifyü  st   € à�k‰k‹mˆØ�‰�c—j‘j“l DÔ)à�k‰kÔ/Ó0ˆØ×Ñœ|Ô,°Ø�J‰JŒL÷ -ä�—‘ÓˆØ�‰Ð0°!Õ4÷ -Ð,ús   ÁBÂB%c                 ó`  — | j                  «       }|j                  d«      }| j                  |t        j                  «       | j                  |j                  d«       | j                  t        «      5  |j                  d«       d d d «       ~t        |j                   «       y # 1 sw Y   Œ xY w)NÚsumrë   )
rA   Úget_functionr  r*   ÚValueRefr6   rD   râ   Ú	NameErrorr    ©r2   r@   rð   s      r   Útest_get_functionzTestModuleRef.test_get_function  s   € Ø�k‰k‹mˆØ×Ñ˜eÓ$ˆØ×Ñ˜b¤$§-¡-Ô0Ø×Ñ˜Ÿ™ %Ô(à×ÑœyÕ)Ø×Ñ˜UÔ#÷ *ð ÜˆB�I‰I�÷ *Ð)úó   Á3B$Â$B-c                 óP  — | j                  «       }|j                  d«      }| j                  |j                  d«       | j	                  t        j                  dt        |«      «      «       | j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nústruct.glob_typeú8%struct\.glob_type(\.[\d]+)? = type { i64, \[2 x i64\] }zstruct.doesnt_exist)
rA   Úget_struct_typer6   rD   r  ru   r{   r    râ   rg  )r2   r@   Úst_tys      r   Útest_get_struct_typez"TestModuleRef.test_get_struct_type  s�   € Ø�k‰k‹mˆØ×#Ñ#Ð$6Ó7ˆØ×Ñ˜Ÿ™Ð%7Ô8à×ÑœRŸX™XØGÜ�‹Jóô 	ð ×ÑœyÕ)Ø×ÑÐ 5Ô6÷ *×)Ñ)ús   ÂBÂB%c                 ó`  — | j                  «       }|j                  d«      }| j                  |t        j                  «       | j                  |j                  d«       | j                  t        «      5  |j                  d«       d d d «       ~t        |j                   «       y # 1 sw Y   Œ xY w)NrE   rV  )
rA   rC   r  r*   rf  r6   rD   râ   rg  r    )r2   r@   Úgvs      r   Útest_get_global_variablez&TestModuleRef.test_get_global_variable   s   € Ø�k‰k‹mˆØ×$Ñ$ VÓ,ˆØ×Ñ˜b¤$§-¡-Ô0Ø×Ñ˜Ÿ™ &Ô)à×ÑœyÕ)Ø×#Ñ# EÔ*÷ *ð ÜˆB�I‰I�÷ *Ð)úrj  c                 óò   — | j                  «       }|j                  }~t        |d„ ¬«      }| j                  t	        |«      d«       | j                  |D �cg c]  }|j
                  ‘Œ c}g d¢«       y c c}w )Nc                 ó   — | j                   S r)   rª   )Úvalues    r   Ú<lambda>z5TestModuleRef.test_global_variables.<locals>.<lambda>1  s   € ¨U¯ZªZr4   )Úkeyé   )rE   Úglob_bÚglob_fÚglob_struct)rA   Úglobal_variablesÚsortedr6   r|   rD   )r2   r@   ÚitÚglobsÚgs        r   Útest_global_variablesz#TestModuleRef.test_global_variables-  sf   € Ø�k‰k‹mˆØ×!Ñ!ˆØÜ�rÑ7Ô8ˆØ×Ñœ˜U› QÔ'Ø×Ñ©%Ó0©% Q˜!Ÿ&›&¨%Ñ0ÚDõ	FùÒ0s   ÁA4c                 óÈ   — | j                  «       }|j                  }~t        |«      }| j                  t	        |«      d«       | j                  |d   j
                  d«       y ©Nr_   r   rd  )rA   Ú	functionsÚlistr6   r|   rD   )r2   r@   r  Úfuncss       r   Útest_functionszTestModuleRef.test_functions6  sN   € Ø�k‰k‹mˆØ�]‰]ˆØÜ�R“ˆØ×Ñœ˜U› QÔ'Ø×Ñ˜˜q™Ÿ™¨Õ.r4   c           	      óP  — | j                  «       }|j                  }~t        |«      }| j                  t	        |«      d«       | j                  t        j                  d|d   j                  «      «       | j                  t        j                  dt        |d   «      «      «       y )Nr_   ústruct\.glob_type(\.[\d]+)?r   rm  )
rA   Ústruct_typesr†  r6   r|   r  ru   r{   rD   r    )r2   r@   r  Ústructss       r   Útest_structszTestModuleRef.test_structs>  s†   € Ø�k‰k‹mˆØ×ÑˆØÜ�r“(ˆØ×Ñœ˜W› qÔ)Ø×ÑœRŸX™XÐ&DØ&-¨a¡j§o¡oó7ô 	8à×ÑœRŸX™XØGÜ�˜‘
‹Oóõ 	r4   c                 ó˜  — | j                  «       }| j                  t        «      }|j                  |«       | j                  t	        d„ |j
                  D «       «      ddg«       |j                  d«       |j                  «        | j                  t        j                  «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w)Nc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr)   rª   ©Ú.0Úfs     r   Ú	<genexpr>z-TestModuleRef.test_link_in.<locals>.<genexpr>O  ó   è ø€ Ð2¡>˜a�1—6•6¡>ùó   ‚Úmulrd  )rA   Úasm_mulÚlink_inr6   r~  r…  re  rN  râ   rO  rP  )r2   ÚdestÚsrcs      r   Útest_link_inzTestModuleRef.test_link_inJ  s“   € Ø�{‰{‹}ˆØ�k‰kœ'Ó"ˆØ�‰�SÔØ×ÑÜÑ2 4§>¢>Ó2Ó2°U¸E°Nô	Dà×Ñ˜%Ô Ø�
‰
ŒØ×Ñœv×3Ñ3Õ4Ø×Ñ˜UÔ#÷ 5×4Ñ4ús   Â%C Ã C	c                 ól  — | j                  «       }| j                  t        «      }|j                  |d¬«       | j                  t	        d„ |j
                  D «       «      ddg«       |j                  «        | j                  t	        d„ |j
                  D «       «      dg«       |j                  d«       y )NT©Úpreservec              3   ó4   K  — | ]  }|j                   –— Œ y ­wr)   rª   r�  s     r   r“  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>Z  r”  r•  r–  rd  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr)   rª   r�  s     r   r“  z6TestModuleRef.test_link_in_preserve.<locals>.<genexpr>\  s   è ø€ Ð?±¨1 §¥±ùr•  )rA   r—  r˜  r6   r~  r…  rN  re  )r2   r™  Úsrc2s      r   Útest_link_in_preservez#TestModuleRef.test_link_in_preserveU  sŠ   € Ø�{‰{‹}ˆØ�{‰{œ7Ó#ˆØ�‰�T DˆÔ)Ø×ÑÜÑ2 4§>¢>Ó2Ó2°U¸E°Nô	Dà�
‰
ŒØ×ÑœÑ?°·²Ó?Ó?À%ÀÔIØ×Ñ˜%Õ r4   c                 ó  — | j                  «       }| j                  t        «      }| j                  t        «      5 }|j	                  |«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nzsymbol multiply defined)rA   Úasm_sum2râ   rŸ   r˜  rå   r    rä   )r2   r™  rš  ræ   s       r   Útest_link_in_errorz TestModuleRef.test_link_in_error_  s_   € ð �{‰{‹}ˆØ�k‰kœ(Ó#ˆØ×Ñœ|Ô,°Ø�L‰L˜Ô÷ -à�‰Ð/´°R·\±\Ó1BÕC÷ -Ð,ús   »A;Á;Bc                 ó²   — | j                  «       }|j                  «       }d}d}| j                  |j                  |«      xs |j                  |«      «       y )Ns   ÞÀs   BC)rA   Ú
as_bitcoder  r‚   )r2   r@   ÚbcÚbitcode_wrapper_magicÚbitcode_magics        r   Útest_as_bitcodezTestModuleRef.test_as_bitcodeh  sO   € Ø�k‰k‹mˆØ�^‰^Óˆð !4ÐØˆØ�‰˜Ÿ™ mÓ4ò =ØŸ™Ð&;Ó<õ	>r4   c                 ó  — | j                  t        «      5 }t        j                  d«       d d d «       | j	                  dt        j                  «      «       | j	                  dt        |j                  «      «       y # 1 sw Y   ŒTxY w)Nr4   zLLVM bitcode parsing errorz(file too small to contain bitcode header)râ   rŸ   r*   Úparse_bitcoderå   r    rä   )r2   ræ   s     r   Útest_parse_bitcode_errorz&TestModuleRef.test_parse_bitcode_errorr  s`   € Ø×Ñœ|Ô,°Ü×Ñ˜sÔ#÷ -à�‰Ð2´C¸¿¹Ó4EÔFØ�‰Ø6¼¸B¿L¹LÓ8Iõ	
÷ -Ð,ús   –A?Á?Bc                 óD  — t        j                  «       }| j                  |¬«      j                  «       }t        j                  «       }t        j                  ||«      }| j                  |j                  «       |«       |j                  d«       |j                  d«       y )N©r?   rd  rE   )r*   Úcreate_contextrA   r§  r­  r6   re  rC   )r2   Úcontext1r¨  Úcontext2r@   s        r   Útest_bitcode_roundtripz$TestModuleRef.test_bitcode_roundtripz  s|   € ä×&Ñ&Ó(ˆØ�[‰[ ˆ[Ó*×5Ñ5Ó7ˆÜ×&Ñ&Ó(ˆÜ× Ñ   XÓ.ˆØ×Ñ˜Ÿ™Ó)¨2Ô.à×Ñ˜ÔØ×Ñ Õ'r4   c                 óÄ   — | j                  «       }|j                  «       }| j                  ||«       | j                  |j	                  «       |j	                  «       «       y r)   )rA   ÚcloneÚassertIsNotr6   r§  )r2   r�   Úcloneds      r   Útest_cloningzTestModuleRef.test_cloning…  sG   € Ø�K‰K‹MˆØ—‘“ˆØ×Ñ˜ Ô#Ø×Ñ˜×*Ñ*Ó,¨a¯l©l«nÕ=r4   N)rN   rO   rP   rL  rR  rT  rW  rZ  r]  r_  rb  ri  rp  rs  r‚  rˆ  r�  r›  r¢  r¥  r«  r®  r´  r¹  rR   r4   r   rI  rI  É  sm   „ ò9ò
ò	ò*ò7ò-ò)ò	5òò
7òòFò/ò
ò	$ò!òDò>ò
ò	(ó>r4   rI  c                   óf   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚJITTestMixinz*
    Mixin for ExecutionEngine tests.
    c                 ó¤   — |j                  «        |j                  |«      }| j                  |«        t        t        t        t        «      |«      S r)   )Úfinalize_objectÚget_function_addressr  r   r   )r2   ÚeeÚ	func_nameÚcfptrs       r   Úget_sumzJITTestMixin.get_sum‘  s@   € Ø
×ÑÔØ×'Ñ'¨	Ó2ˆØ�‰˜ÔØ-Œyœ¤¤uÓ-¨eÓ4Ð4r4   c                 óÈ   — | j                  «       }| j                  |«      5 }| j                  |«      } |dd«      }| j                  d|«       d d d «       y # 1 sw Y   y xY w©Nr`   éûÿÿÿéýÿÿÿ)rA   rH   rÂ  r6   )r2   r@   r¿  ÚcfuncÚress        r   Útest_run_codezJITTestMixin.test_run_code—  sM   € Ø�k‰k‹mˆØ�X‰X�cŒ]˜bØ—L‘L Ó$ˆEÙ˜˜2“,ˆCØ×Ñ˜R Ô%÷ �]‰]ús   ¢-AÁA!c                 ó
  — | j                  | j                  «       «      }|j                  «        |j                  «        | j                  t        j
                  «      5  |j                  «        d d d «       y # 1 sw Y   y xY wr)   )rH   rA   rN  râ   rO  rP  r½  ©r2   r¿  s     r   rR  zJITTestMixin.test_closež  sT   € Ø�X‰X�d—k‘k“mÓ$ˆØ
�‰Œ
Ø
�‰Œ
Ø×Ñœv×3Ñ3Õ4Ø×ÑÔ ÷ 5×4Ñ4ús   ÁA9Á9Bc                 ó~  — | j                  | j                  «       «      }|5  	 d d d «       | j                  t        «      5  |5  	 d d d «       d d d «       | j                  t        j
                  «      5  |j                  «        d d d «       y # 1 sw Y   ŒlxY w# 1 sw Y   ŒVxY w# 1 sw Y   ŒZxY w# 1 sw Y   y xY wr)   )rH   rA   râ   rŸ   rO  rP  r½  rË  s     r   rT  zJITTestMixin.test_with¥  s‹   € Ø�X‰X�d—k‘k“mÓ$ˆÚØ÷ à×Ñœ|Õ,ÚØ÷ ÷ -ð ×Ñœv×3Ñ3Õ4Ø×ÑÔ ÷ 5Ð4÷ ˆRú÷ �ú÷ -Ð,ú÷ 5Ð4ús;   ¢BÁB'ÁBÁB'Á5B3ÂBÂB$	Â B'Â'B0Â3B<c                 ó†   — | j                  «       }| j                  |«      }|j                  «        |j                  «        y r)   ©rA   rH   rN  ©r2   r@   r¿  s      r   Útest_module_lifetimez!JITTestMixin.test_module_lifetime¯  s,   € Ø�k‰k‹mˆØ�X‰X�c‹]ˆØ
�‰Œ
Ø�	‰	�r4   c                 ó†   — | j                  «       }| j                  |«      }|j                  «        |j                  «        y r)   rÎ  rÏ  s      r   Útest_module_lifetime2z"JITTestMixin.test_module_lifetime2µ  s,   € Ø�k‰k‹mˆØ�X‰X�c‹]ˆØ�	‰	ŒØ
�‰�
r4   c                 ó�  — | j                  | j                  «       «      }| j                  t        «      }|j                  |«       | j	                  t
        «      5  |j                  |«       d d d «       | j                  |j                  «       |j                  «        | j                  |j                  «       y # 1 sw Y   ŒPxY wr)   )
rH   rA   r—  Ú
add_modulerâ   ÚKeyErrorÚassertFalseÚclosedrN  r  ©r2   r¿  r@   s      r   Útest_add_modulezJITTestMixin.test_add_module»  sƒ   € Ø�X‰X�d—k‘k“mÓ$ˆØ�k‰kœ'Ó"ˆØ
�‰�cÔØ×ÑœxÕ(Ø�M‰M˜#Ô÷ )à×Ñ˜Ÿ™Ô$Ø
�‰Œ
Ø�‰˜Ÿ
™
Õ#÷	 )Ð(ús   ÁB<Â<Cc                 óÎ   — | j                  | j                  «       «      }| j                  t        «      }|j                  |«       |j	                  «        |j	                  «        y r)   ©rH   rA   r—  rÔ  rN  rØ  s      r   Útest_add_module_lifetimez%JITTestMixin.test_add_module_lifetimeÅ  sB   € Ø�X‰X�d—k‘k“mÓ$ˆØ�k‰kœ'Ó"ˆØ
�‰�cÔØ�	‰	ŒØ
�‰�
r4   c                 óÎ   — | j                  | j                  «       «      }| j                  t        «      }|j                  |«       |j	                  «        |j	                  «        y r)   rÛ  rØ  s      r   Útest_add_module_lifetime2z&JITTestMixin.test_add_module_lifetime2Ì  sB   € Ø�X‰X�d—k‘k“mÓ$ˆØ�k‰kœ'Ó"ˆØ
�‰�cÔØ
�‰Œ
Ø�	‰	�r4   c                 ó²  — | j                  | j                  «       «      }| j                  t        «      }|j                  |«       |j	                  |«       | j                  t        «      5  |j	                  |«       d d d «       | j                  |j                  «       |j                  «        | j                  |j                  «       y # 1 sw Y   ŒPxY wr)   )
rH   rA   r—  rÔ  Úremove_modulerâ   rÕ  rÖ  r×  rN  rØ  s      r   Útest_remove_modulezJITTestMixin.test_remove_moduleÓ  s•   € Ø�X‰X�d—k‘k“mÓ$ˆØ�k‰kœ'Ó"ˆØ
�‰�cÔØ
×Ñ˜ÔØ×ÑœxÕ(Ø×Ñ˜SÔ!÷ )à×Ñ˜Ÿ™Ô$Ø
�‰Œ
Ø×Ñ˜Ÿ™Õ$÷	 )Ð(ús   Á,CÃCc                 óÆ   — | j                  «       }| j                  |«      }|j                  }| j                  |j                  |«       t	        |«       ~~t	        |«       y r)   )rA   rH   Útarget_datarþ   r    )r2   r@   r¿  Útds       r   Útest_target_datazJITTestMixin.test_target_dataÞ  sH   € Ø�k‰k‹mˆØ�X‰X�c‹]ˆØ�^‰^ˆà�‰�b—n‘n bÔ)ÜˆBŒØ�ÜˆB�r4   c                 ó`  — | j                  «       }| j                  |«      }|j                  }|j                  d«      }|j                  d«      }|j                  d«      }t        j
                  dk  rdnd}|||fD ]-  }| j                  |j                  |j                  «      |«       Œ/ | j                  |j                  |j                  «      d«       | j                  |j                  |j                  «      d«       | j                  |j                  |j                  «      d«       | j                  |j                  |j                  «      d«       | j                  |j                  |j                  «      d	«       | j                  |j                  |j                  «      d
«       y )NrE   rz  r|  ì        ry  é   r_   )r_   r`   ry  é   )ry  rè  )rA   rH   rã  rC   r”   Úmaxsizer6   Úget_abi_sizeÚtypeÚglobal_value_typeÚget_abi_alignmentrå   )	r2   r@   r¿  rä  Úgv_i32Úgv_i8Ú	gv_structÚpointer_sizer�  s	            r   Útest_target_data_abi_enquiriesz+JITTestMixin.test_target_data_abi_enquiriesè  sQ  € Ø�k‰k‹mˆØ�X‰X�c‹]ˆØ�^‰^ˆØ×(Ñ(¨Ó0ˆØ×'Ñ'¨Ó1ˆØ×+Ñ+¨MÓ:ˆ	äŸK™K¨'Ò1‘q°qˆØ˜% Ó+ˆAØ×Ñ˜RŸ_™_¨Q¯V©VÓ4°lÕCð ,ð 	×Ñ˜Ÿ™¨×)AÑ)AÓBÀAÔFØ×Ñ˜×-Ñ-¨f×.FÑ.FÓGÈÔKà×Ñ˜Ÿ™¨×)@Ñ)@ÓAÀ1ÔEØ�‰�b×*Ñ*¨5×+BÑ+BÓCÀYÔOà×Ñ˜Ÿ™¨×)DÑ)DÓEÀrÔJØ�‰�b×*Ñ*¨9×+FÑ+FÓGÈÕPr4   c                 ó˜  ‡— g Šˆfd„}| j                  «       }| j                  |«      }|j                  |«       | j                  t	        ‰«      d«       | j                  |«      } |dd«       | j                  t	        ‰«      d«       | j                  ‰d   d   |«       | j                  ‰d   d   t        «       g ‰d d  | j                  t        «      }|j                  |«       | j                  |d«      }| j                  t	        ‰«      d«       | j                  ‰d   d   |«       | j                  ‰d   d   t        «       y )Nc                 ó,   •— ‰j                  | |f«       y r)   ©rƒ   ©r@   ÚbufÚnotifiess     €r   Únotifyz5JITTestMixin.test_object_cache_notify.<locals>.notify   ó   ø€ Ø�O‰O˜S #˜JÕ'r4   r   r`   rÅ  r_   r–  )rA   rH   Úset_object_cacher6   r|   rÂ  rþ   r  Úbytesr—  rÔ  )r2   rú  r@   r¿  rÇ  Úmod2rù  s         @r   Útest_object_cache_notifyz%JITTestMixin.test_object_cache_notifyý  s  ø€ Øˆô	(ð �k‰k‹mˆØ�X‰X�c‹]ˆØ
×Ñ˜FÔ#à×Ñœ˜X›¨Ô*Ø—‘˜RÓ ˆÙˆa�ŒØ×Ñœ˜X›¨Ô*à�‰�h˜q‘k !‘n cÔ*Ø×Ñ˜h q™k¨!™n¬eÔ4àˆ‘ˆØ�{‰{œ7Ó#ˆØ
�‰�dÔØ—‘˜R Ó'ˆØ×Ñœ˜X›¨Ô*à�‰�h˜q‘k !‘n dÔ+Ø×Ñ˜h q™k¨!™n¬eÕ4r4   c                 ó|  ‡‡‡	— g Šg Šˆfd„}ˆfd„}| j                  «       }| j                  |«      }|j                  ||«       | j                  t	        ‰«      d«       | j                  t	        ‰«      d«       | j                  |«      }| j                  t	        ‰«      d«       | j                  t	        ‰«      d«       | j                  ‰d   |«       ‰d   d   Š	ˆˆ	fd„}g ‰d d  g ‰d d  | j                  t        «      }| j                  |«      }|j                  ||«       | j                  t	        ‰«      d«       | j                  t	        ‰«      d«       | j                  |«      }| j                   |dd«      d«       | j                  t	        ‰«      d«       | j                  t	        ‰«      d«       y )	Nc                 ó,   •— ‰j                  | |f«       y r)   rö  r÷  s     €r   rú  z8JITTestMixin.test_object_cache_getbuffer.<locals>.notify  rû  r4   c                 ó(   •— ‰j                  | «       y r)   rö  )r@   Ú
getbufferss    €r   Ú	getbufferz;JITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer  s   ø€ Ø×Ñ˜cÕ"r4   r   r_   c                 ó*   •— ‰j                  | «       ‰S r)   rö  )r@   r  Ú
sum_buffers    €€r   Úgetbuffer_successfulzFJITTestMixin.test_object_cache_getbuffer.<locals>.getbuffer_successful2  s   ø€ Ø×Ñ˜cÔ"ØÐr4   r`   rÅ  rÆ  )rA   rH   rü  r6   r|   rÂ  rþ   r—  )
r2   rú  r  r@   r¿  rÇ  r  r  rù  r  s
          @@@r   Útest_object_cache_getbufferz(JITTestMixin.test_object_cache_getbuffer  sy  ú€ ØˆØˆ
ô	(ô	#ð �k‰k‹mˆØ�X‰X�c‹]ˆØ
×Ñ˜F IÔ.ð 	×Ñœ˜X›¨Ô*Ø×Ñœ˜Z›¨!Ô,Ø—‘˜RÓ ˆØ×Ñœ˜X›¨Ô*Ø×Ñœ˜Z›¨!Ô,Ø�‰�j ‘m SÔ)Ø˜a‘[ ‘^ˆ
õ
	ð ˆ‘ˆØˆ
‘1ˆà�k‰kœ'Ó"ˆØ�X‰X�c‹]ˆØ
×Ñ˜FÐ$8Ô9à×Ñœ˜X›¨Ô*Ø×Ñœ˜Z›¨!Ô,Ø—‘˜RÓ ˆØ×Ñ™˜q "› rÔ*Ø×Ñœ˜X›¨Ô*Ø×Ñœ˜Z›¨!Õ,r4   N)rd  )rN   rO   rP   r‘   rÂ  rÉ  rR  rT  rÐ  rÒ  rÙ  rÜ  rÞ  rá  rå  ró  rÿ  r  rR   r4   r   r»  r»  Œ  sN   „ ñó5ò&ò!ò!òòò$òòò	%òòQò*5ó6*-r4   r»  c                   ó   — e Zd Zd„ Zd„ Zy)ÚJITWithTMTestMixinc                 ó>  — | j                  d¬«      }| j                  «       }| j                  ||«      }|j                  |«      }| j	                  d|«       |j                  d«       |j                  |«      }| j	                  d|«       | j                  ||«       y)z%Test TargetMachineRef.emit_assembly()TrG   rd  N)rM   rA   rH   rÏ   rå   Úset_asm_verbosityÚassertNotEqual)r2   rM   r@   r¿  Úraw_asmÚraw_asm_verboses         r   Útest_emit_assemblyz%JITWithTMTestMixin.test_emit_assemblyG  sŠ   € à×,Ñ,°Ð,Ó6ˆØ�k‰k‹mˆØ�X‰X�c˜>Ó*ˆØ ×.Ñ.¨sÓ3ˆØ�‰�e˜WÔ%Ø×(Ñ(¨Ô.Ø(×6Ñ6°sÓ;ˆØ�‰�e˜WÔ%Ø×Ñ˜G _Õ5r4   c                 ó$  — | j                  d¬«      }| j                  «       }| j                  ||«      }|j                  |«      }| j	                  |t
        «       t        j                  j                  d«      r| j                  d|dd «       yy)z#Test TargetMachineRef.emit_object()TrG   rU   s   ELFNé
   )
rM   rA   rH   Úemit_objectr  rý  r”   r€   r‚   rå   )r2   rM   r@   r¿  Úcode_objects        r   Útest_emit_objectz#JITWithTMTestMixin.test_emit_objectS  s|   € à×,Ñ,°Ð,Ó6ˆØ�k‰k‹mˆØ�X‰X�c˜>Ó*ˆØ$×0Ñ0°Ó5ˆØ×Ñ˜k¬5Ô1Ü�<‰<×"Ñ" 7Ô+à�M‰M˜& +¨c¨rÐ"2Õ3ð ,r4   N)rN   rO   rP   r  r  rR   r4   r   r
  r
  E  s   „ ò
6ó	4r4   r
  c                   ó   — e Zd ZdZdd„Zy)Ú	TestMCJitz@
    Test JIT engines created with create_mcjit_compiler().
    Nc                 óV   — |€| j                  d¬«      }t        j                  ||«      S )NTrG   )rM   r*   Úcreate_mcjit_compiler)r2   r@   rM   s      r   rH   zTestMCJit.jitd  s.   € ØÐ!Ø!×0Ñ0°TÐ0Ó:ˆNÜ×)Ñ)¨#¨~Ó>Ð>r4   r)   )rN   rO   rP   r‘   rH   rR   r4   r   r  r  _  s   „ ñô?r4   r  zOrcJIT support is experimentalc            	       ó�   — e Zd Zeddd eeee«      dfd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestOrcLLJITrd  NFc                 óœ  — t        j                  |d|¬«      }t        j                  «       }|r|j                  «        |j	                  |j                  t        j                  «       ¬«      «      j                  |«      j                  ||«      }	|	|   }
| j                  |
«       | j                  ||	j                  «       ||	 ||
«      fS )NF)Úuse_jit_linkÚsuppress_errorsr9   )r*   Úcreate_lljit_compilerÚJITLibraryBuilderÚadd_current_processÚadd_irr;   r<   Úexport_symbolÚlinkr  r6   rD   )r2   r>   rÀ  rM   Úadd_processÚ	func_typer  Úlljitr»   ÚrtrÁ  s              r   rH   zTestOrcLLJIT.jitt  sµ   € ô ×*Ñ*¨>Ø8=Ø;JôLˆô ×(Ñ(Ó*ˆÙØ×'Ñ'Ô)Øß‰V�C—J‘J¤d×&=Ñ&=Ó&?�JÓ@ÓAß‰]˜9Ó%ß‰T�%˜Ó#ð 	ð �9‘ˆØ�‰˜ÔØ×Ñ˜ B§G¡GÔ,Ø�b™) EÓ*Ð*Ð*r4   c                 óÜ   — t        j                  «       }t        j                  «       j                  dd«      j	                  d«      j                  |d«      }| j                  |d   d«       y )Nrù   rú   rë   )r*   r  r   Úimport_symbolr#  r$  r6   ©r2   r'  r(  s      r   Útest_define_symbolzTestOrcLLJIT.test_define_symbol‡  sW   € Ü×*Ñ*Ó,ˆÜ×#Ñ#Ó%×3Ñ3°I¸tÓDß‰]˜9Ó%§d¡d¨5°%Ó&8ð 	à×Ñ˜˜I™¨Õ-r4   c                 óÐ  — t        j                  «       }| j                  t        d«      5  |j	                  dd«       d d d «       t        j
                  «       j                  dd«      j                  d«      j                  |d«      }| j                  |d   d«       | j                  t        d«      5  |j	                  dd«       d d d «       y # 1 sw Y   Œ“xY w# 1 sw Y   y xY w)NzNo such libraryrë   rû   rù   rú   r   zSymbols not found.*__foobar)
r*   r  r,  rŸ   Úlookupr   r*  r#  r$  r  r+  s      r   Ú"test_lookup_undefined_symbol_failsz/TestOrcLLJIT.test_lookup_undefined_symbol_fails�  sÁ   € Ü×*Ñ*Ó,ˆØ×#Ñ#¤LÐ2CÕDØ�L‰L˜ 
Ô+÷ Eä×#Ñ#Ó%×3Ñ3°I¸tÓDß‰]˜9Ó%§d¡d¨5°%Ó&8ð 	à×Ñ˜B˜y™M¨1Ô-Ø×#Ñ#¤LØ$AõCà�L‰L˜ 
Ô+÷Cð C÷ EÐDú÷
Cð Cús   «CÂ4CÃCÃC%c                 óø   — t         j                  dk(  r6| j                  t        d«      5  t	        j
                  d¬«       d d d «       y | j                  t	        j
                  d¬«      «       y # 1 sw Y   y xY w)NÚwin32zJITLink .* WindowsT)r  )r”   r€   r,  rŸ   r*   r  r  r1   s    r   Útest_jit_linkzTestOrcLLJIT.test_jit_link˜  s_   € Ü�<‰<˜7Ò"Ø×'Ñ'¬Ø(<õ>ä×*Ñ*¸Õ=÷>ð >ð × Ñ ¤×!;Ñ!;ÈÔ!NÕO÷	>ð >ús   ªA0Á0A9c                 ó�   — | j                  «       \  }}}|5   |dd«      }| j                  d|«       d d d «       y # 1 sw Y   y xY wrÄ  )rH   r6   )r2   r'  r(  rÇ  rÈ  s        r   rÉ  zTestOrcLLJIT.test_run_code   s<   € Ø!ŸX™X›ZÑˆ��EÚÙ˜˜2“,ˆCØ×Ñ˜R Ô%÷ �U‰Uús	   —<¼Ac                 óä   — | j                  «       \  }}}|j                  «        |j                  «        | j                  t        «      5  |j	                  dd«       d d d «       y # 1 sw Y   y xY w©Nrë   rð   )rH   rN  râ   ÚAssertionErrorr.  ©r2   r'  r(  rÇ  s       r   rR  zTestOrcLLJIT.test_close¦  sN   € Ø!ŸX™X›ZÑˆ��EØ�‰ŒØ�‰ŒØ×Ñœ~Õ.Ø�L‰L˜ Ô%÷ /×.Ñ.ús   Á
A&Á&A/c                 óX  — | j                  «       \  }}}|5  	 d d d «       | j                  t        «      5  |5  	 d d d «       d d d «       | j                  t        «      5  |j	                  dd«       d d d «       y # 1 sw Y   ŒdxY w# 1 sw Y   ŒNxY w# 1 sw Y   ŒRxY w# 1 sw Y   y xY wr5  )rH   râ   rŸ   r6  r.  r7  s       r   rT  zTestOrcLLJIT.test_with­  s…   € Ø!ŸX™X›ZÑˆ��EÚØ÷ à×Ñœ|Õ,ÚØ÷ ÷ -ð ×Ñœ~Õ.Ø�L‰L˜ Ô%÷ /Ð.÷ ˆUú÷ �ú÷ -Ð,ú÷ /Ð.ús8   —A<¶B¹B»BÁ B Á<BÂB	ÂBÂBÂ B)c                 óö  — | j                  «       \  }}}t        j                  «       j                  t        j                  t        j                  «       ¬«      «      j                  d«      j                  |d«      }  t        t        t        t        «      |d   «      dd«      }| j                  d|«       | j                  |j                  dd«      d   d«       | j                  |j                  dd«      d   d«       | j                  t        «      5  |j                  dd«       d d d «       | j                  t        «      5  |j                  dd«       d d d «       y # 1 sw Y   Œ:xY w# 1 sw Y   y xY w)Nr9   r–  r`   rÅ  iöÿÿÿrd  r   )rH   r*   r   r"  r—  r;   r<   r#  r$  r   r   r6   r  r.  râ   rŸ   ©r2   r'  Úrt_sumÚ	cfunc_sumÚrt_mulrÈ  s         r   Útest_add_ir_modulezTestOrcLLJIT.test_add_ir_module·  s#  € Ø%)§X¡X£ZÑ"ˆ�˜	Ü×'Ñ'Ó)ß‰V”G—N‘N¬$×*AÑ*AÓ*C�NÓDÓEß‰]˜5Ó!ß‰T�%˜Óð 	ð <Ð,Œiœœu¤eÓ,¨V°E©]Ó;¸A¸rÓBˆØ×Ñ˜˜cÔ"Ø×Ñ˜EŸL™L¨°Ó6°uÑ=¸qÔAØ×Ñ˜EŸL™L¨°Ó6°uÑ=¸qÔAØ×Ñœ|Õ,Ø�L‰L˜ Ô&÷ -à×Ñœ|Õ,Ø�L‰L˜ Ô&÷ -Ð,÷ -Ð,úç,Ð,ús   ÄE#ÅE/Å#E,Å/E8c                 óî   — | j                  «       \  }}}~t        j                  «        | j                  t        «      5  |j                  dd«       d d d «       |j                  «        y # 1 sw Y   ŒxY w©Nrd  )rH   r-   r.   râ   rŸ   r.  rN  )r2   r'  r;  r‡   s       r   rá  zTestOrcLLJIT.test_remove_moduleÆ  sS   € Ø!ŸX™X›ZÑˆ�˜ØÜ
�
‰
ŒØ×Ñœ|Õ,Ø�L‰L˜ Ô&÷ -à�‰�÷ -Ð,ús   ¿A+Á+A4c                 ó�  — | j                  «       \  }}}t        j                  «       j                  t        j                  t        j                  «       ¬«      «      j                  d«      j                  d«      j                  |d«      }  t        t        t        t        «      |d   «      dd«      }| j                  d|«       y )Nr9   Ú
square_sumrd  r`   rÅ  r3  )rH   r*   r   r"  Úasm_square_sumr;   r<   r#  Úadd_jit_libraryr$  r   r   r6   r:  s         r   Útest_lib_dependszTestOrcLLJIT.test_lib_dependsÎ  s�   € Ø%)§X¡X£ZÑ"ˆ�˜	Ü×'Ñ'Ó)ß‰V”N×)Ñ)´×1HÑ1HÓ1JÐ)ÓKÓLß‰]˜<Ó(ß‰_˜UÓ#ß‰T�%˜Ó&ð	 	ð
 CÐ,Œiœœu¤eÓ,¨V°LÑ-AÓBÀ1ÀbÓIˆØ×Ñ˜˜CÕ r4   c                 óª   — | j                  «       \  }}}|j                  }| j                  |j                  |«       t        |«       ~t        |«       y r)   )rH   rã  rþ   r    )r2   r'  r(  r‡   rä  s        r   rå  zTestOrcLLJIT.test_target_dataØ  sC   € ØŸ™›‰ˆ��AØ×Ñˆà�‰�e×'Ñ'¨Ô,ÜˆBŒØÜˆB�r4   c                 ó  — t        d«      }t        j                  «       }t        j                  «       }|j	                  t
        j                  t        j                  «       ¬«      «      j                  dt        j                  |«      «      j                  d«      j                  |d«      }|d   }| j                  |«       | j                    t        t         «      |«      «       d«       ~| j#                  |j$                  d«       y )Nr   r9   ÚArë   é   r2  )r   r*   r  r   r"  Úasm_ext_ctorsr;   r<   r*  rO  Ú	addressofr#  r$  r  r6   r   r   r  rv  )r2   Úshared_valuer'  r»   r(  rë   s         r   Útest_global_ctors_dtorsz$TestOrcLLJIT.test_global_ctors_dtorsá  sÒ   € ô ˜q“zˆÜ×*Ñ*Ó,ˆÜ×(Ñ(Ó*ˆØß‰V”M×(Ñ(´×0GÑ0GÓ0IÐ(ÓJÓKß‰]˜3¤× 0Ñ 0°Ó >Ó?ß‰]˜5Ó!ß‰T�%˜Óð	 	ð
 �‰iˆØ�‰˜ÔØ×ÑÐ.Ð)œ¤5Ó)¨#Ó.Ó0°"Ô5ØØ×Ñ˜L×.Ñ.°Õ3r4   c                 óŽ   — d}| j                  t        |«      5  | j                  t        dd¬«       d d d «       y # 1 sw Y   y xY w)Nz*Failed to materialize symbols:.*getversionÚ
getversionT)r  )r,  rŸ   rH   Úasm_getversion)r2   Úmsgs     r   Ú(test_lookup_current_process_symbol_failsz5TestOrcLLJIT.test_lookup_current_process_symbol_failsò  s7   € ð ;ˆØ×#Ñ#¤L°#Õ6Ø�H‰H”^ \À4ˆHÔH÷ 7×6Ñ6ús	   ™;»Ac                 ó4   — | j                  t        dd d«       y )NrO  T)rH   rP  r1   s    r   Ú"test_lookup_current_process_symbolz/TestOrcLLJIT.test_lookup_current_process_symbolú  s   € Ø�‰” ¨t°TÕ:r4   c                 óz  ‡‡— t        j                  «       Št        j                  t        j                  «       ¬«      Šˆˆfd„}t        t        j                  «       «      D �cg c]  }t        j                   ||«      ¬«      ‘Œ  }}|D ]  }|j                  «        Œ |D ]  }|j                  «        Œ y c c}w )Nr9   c                 ó   •‡ — ˆ ˆˆfd„}|S )Nc            
      óØ   •— g } t        d«      D ]Y  }| j                  t        j                  «       j	                  ‰«      j                  d«      j                  ‰d‰› d|› �«      «       Œ[ y )Né2   rd  Úsum_r‡   )r5  rƒ   r*   r   r"  r#  r$  )ÚtrackingÚcÚir'  Úllvm_irs     €€€r   Údo_workzDTestOrcLLJIT.test_thread_safe.<locals>.compile_many.<locals>.do_work  sY   ø€ Ø�Ü˜rž�AØ—O‘O¤D×$:Ñ$:Ó$<ß%+¡V¨G£_ß%2¡]°5Ó%9ß%)¡T¨%°4¸°s¸!¸A¸3°Ó%@õBñ #r4   rR   )r\  r^  r'  r]  s   ` €€r   Úcompile_manyz3TestOrcLLJIT.test_thread_safe.<locals>.compile_many  s   ù€ öBð ˆNr4   )rL   )r*   r  rQ   r;   r<   r5  rm   Ú	cpu_countÚ	threadingÚThreadÚstartÚjoin)r2   r_  r\  ÚthsÚthr'  r]  s        @@r   Útest_thread_safezTestOrcLLJIT.test_thread_safeý  s–   ù€ Ü×*Ñ*Ó,ˆÜ—.‘.¬×(?Ñ(?Ó(A�.ÓBˆõ		ô œbŸl™l›nÔ-ó/Ù-�1ô ×Ñ¡|°A£Ö7Ø-ð 	ð /ãˆBØ�H‰H�Jð ãˆBØ�G‰G�Iñ ùò	/s   Á$#B8c                 óŠ  — | j                  d¬«      }| j                  «       }t        j                  |«      }t        j                  «       j                  |j                  |«      «      j                  d«      j                  |d«      } t        t        t        t        «      |d   «      }| j                   |dd«      d«       y )NFrG   rd  r`   é   é   )rM   rA   r*   r  r   Úadd_object_imgr  r#  r$  r   r   r6   )r2   rM   r@   r'  r(  rd  s         r   Útest_add_object_filez!TestOrcLLJIT.test_add_object_file  s�   € Ø×,Ñ,°Ð,Ó7ˆØ�k‰k‹mˆÜ×*Ñ*¨>Ó:ˆÜ×#Ñ#Ó%ß‰^˜N×6Ñ6°sÓ;Ó<ß‰]˜5Ó!ß‰T�%˜Óð 	ð -Œiœœu¤eÓ,¨R°©YÓ7ˆØ×Ñ™˜Q › AÕ&r4   c                 ó€  — | j                  d¬«      }| j                  «       }|j                  |«      }t        «       \  }}	 t	        j
                  |d«      5 }|j                  |«       d d d «       t        j                  |«      }t        j                  «       j                  |«      j                  d«      j                  |d«      } t        t        t        t        «      |d   «      }	| j                   |	dd«      d«       t	        j                   |«       y # 1 sw Y   Œ±xY w# t	        j                   |«       w xY w)NFrG   Úwbrd  r`   ri  rj  )rM   rA   r  r   rm   ÚfdopenÚwriter*   r  r   Úadd_object_filer#  r$  r   r   r6   Úunlink)
r2   rM   r@   Úobj_binÚ	temp_descÚ	temp_pathr’  r'  r(  rd  s
             r   Ú$test_add_object_file_from_filesystemz1TestOrcLLJIT.test_add_object_file_from_filesystem  sø   € Ø×,Ñ,°Ð,Ó7ˆØ�k‰k‹mˆØ ×,Ñ,¨SÓ1ˆÜ&›yÑˆ	�9ð	!Ü—‘˜9 dÔ+¨qØ—‘˜Ô ÷ ,ä×.Ñ.¨~Ó>ˆEÜ×'Ñ'Ó)ß ‘ Ó+ß‘˜uÓ%ß‘�e˜UÓ#ð ð 1”)œE¤5¬%Ó0°°E±Ó;ˆCØ×Ñ™S  A›Y¨Ô*ä�I‰I�iÕ ÷ ,Ð+ûô �I‰I�iÕ ús%   ÁD& ÁDÁ*BD& ÄD#ÄD& Ä&D=)rN   rO   rP   rQ   r   r   rH   r,  r/  r2  rÉ  rR  rT  r>  rá  rE  rå  rM  rR  rT  rg  rl  rv  rR   r4   r   r  r  q  ss   „ ð ¨¸tØ©°5¸%ÀÓ)GØ!ó+ò&.ò	,òPò&ò&ò&ò'òò!òò4ò"Iò;òò,	'ó!r4   r  c                   ó®   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTestValueRefc                 ó|   — | j                  «       }|j                  d«      }| j                  t        |«      d«       y )NrE   z@glob = global i32 0)rA   rC   r6   r    ©r2   r@   rE   s      r   rL  zTestValueRef.test_str4  s2   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×Ñœ˜T›Ð$:Õ;r4   c                 óÄ   — | j                  «       }|j                  d«      }| j                  |j                  d«       d|_        | j                  |j                  d«       y )NrE   Úfoobar)rA   rC   r6   rD   rz  s      r   rW  zTestValueRef.test_name9  sL   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×Ñ˜Ÿ™ FÔ+ØˆŒ	Ø×Ñ˜Ÿ™ HÕ-r4   c                 ó´  — | j                  «       }|j                  d«      }|j                  }| j                  |j                  t        j
                  «       ||_        | j                  |j                  |«       dD ]Y  }||_        | j                  |j                  t        j
                  «       | j                  |j                  j                  |«       Œ[ y )NrE   )ÚinternalÚexternal)rA   rC   Úlinkager  r*   ÚLinkager6   rD   )r2   r@   rE   r€  s       r   Útest_linkagezTestValueRef.test_linkage@  sœ   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ—,‘,ˆØ×Ñ˜dŸl™l¬D¯L©LÔ9ØˆŒØ×Ñ˜Ÿ™ wÔ/Û/ˆGØ"ˆDŒLØ×!Ñ! $§,¡,´·±Ô=Ø×Ñ˜TŸ\™\×.Ñ.°Õ8ñ 0r4   c                 ó´  — | j                  «       }|j                  d«      }|j                  }| j                  |j                  t        j
                  «       ||_        | j                  |j                  |«       dD ]Y  }||_        | j                  |j                  t        j
                  «       | j                  |j                  j                  |«       Œ[ y )NrE   )ÚhiddenÚ	protectedr  )rA   rC   Ú
visibilityr  r*   Ú
Visibilityr6   rD   )r2   r@   rE   r†  s       r   Útest_visibilityzTestValueRef.test_visibilityL  sœ   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ—_‘_ˆ
Ø×Ñ˜dŸo™o¬t¯©Ô?Ø$ˆŒØ×Ñ˜Ÿ™¨*Ô5Û<ˆJØ(ˆDŒOØ×!Ñ! $§/¡/´4·?±?ÔCØ×Ñ˜TŸ_™_×1Ñ1°:Õ>ñ =r4   c                 ó´  — | j                  «       }|j                  d«      }|j                  }| j                  |j                  t        j
                  «       ||_        | j                  |j                  |«       dD ]Y  }||_        | j                  |j                  t        j
                  «       | j                  |j                  j                  |«       Œ[ y )NrE   )Ú	dllimportÚ	dllexportr  )rA   rC   Ústorage_classr  r*   ÚStorageClassr6   rD   )r2   r@   rE   rŒ  s       r   Útest_storage_classzTestValueRef.test_storage_classX  s­   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×*Ñ*ˆØ×Ñ˜d×0Ñ0´$×2CÑ2CÔDØ*ˆÔØ×Ñ˜×+Ñ+¨]Ô;ÛBˆMØ!.ˆDÔØ×!Ñ! $×"4Ñ"4´d×6GÑ6GÔHØ×Ñ˜T×/Ñ/×4Ñ4°mÕDñ Cr4   c                 ó(  — | j                  «       }|j                  d«      }|j                  d«       | j                  t        «      5 }|j                  d«       d d d «       | j                  t        j                  «      d«       y # 1 sw Y   Œ/xY w)Nrd  Ú	nocaptureÚzextzno such attribute 'zext')rA   re  Úadd_function_attributerâ   Ú
ValueErrorr6   r    rä   )r2   r@   rð   Úraisess       r   Útest_add_function_attributez(TestValueRef.test_add_function_attributed  ss   € Ø�k‰k‹mˆØ×Ñ˜eÓ$ˆØ
×!Ñ! +Ô.Ø×ÑœzÔ*¨fØ×%Ñ% fÔ-÷ +à×Ñœ˜V×-Ñ-Ó.Ð0JÕK÷ +Ð*ús   ÁBÂBc                 ó~   — | j                  «       }|j                  d«      }| j                  |j                   |«       y ©NrE   )rA   rC   rþ   rz  s      r   Útest_modulezTestValueRef.test_modulel  s/   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ�‰�d—k‘k 3Õ'r4   c                 óž   — | j                  «       }|j                  d«      }|j                  }| j                  |t        j
                  «       y r—  )rA   rC   rì  r  r*   ÚTypeRef©r2   r@   rE   Útps       r   Ú	test_typezTestValueRef.test_typeq  s:   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ�Y‰YˆØ×Ñ˜b¤$§,¡,Õ/r4   c                 ó*  — | j                  «       }|j                  d«      }|j                  }| j                  |j                  d«       |j                  d«      }| j                  t        j                  d|j                  j                  «      «       y )NrE   rÄ   r|  rŠ  )	rA   rC   rì  r6   rD   r  ru   r{   rí  )r2   r@   rE   rœ  Ústs        r   Útest_type_namezTestValueRef.test_type_namew  sw   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ�Y‰YˆØ×Ñ˜Ÿ™ "Ô%Ø×$Ñ$ ]Ó3ˆØ×ÑœRŸX™XÐ&DØ&(×&:Ñ&:×&?Ñ&?óAõ 	Br4   c                 ó”   — | j                  «       }|j                  d«      }|j                  }| j                  t	        |«      d«       y )NrE   Úi32)rA   rC   rí  r6   r    r›  s       r   Útest_type_printing_variablez(TestValueRef.test_type_printing_variable€  s<   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×#Ñ#ˆØ×Ñœ˜R› %Õ(r4   c                 ó�   — | j                  «       }|j                  d«      }| j                  t        |j                  «      d«       y )Nrd  zi32 (i32, i32))rA   re  r6   r    rí  rh  s      r   Útest_type_printing_functionz(TestValueRef.test_type_printing_function†  s9   € Ø�k‰k‹mˆØ×Ñ˜eÓ$ˆØ×Ñœ˜R×1Ñ1Ó2Ð4DÕEr4   c                 óp  — | j                  «       }|j                  d«      }| j                  |j                  j                  «       | j                  t        j                  dt        |j                  «      «      «       | j                  t        j                  dt        |j                  «      «      «       y )Nr|  Úptrrm  )
rA   rC   r  rì  Ú
is_pointerr  ru   r{   r    rí  )r2   r@   rŸ  s      r   Útest_type_printing_structz&TestValueRef.test_type_printing_struct‹  s~   € Ø�k‰k‹mˆØ×$Ñ$ ]Ó3ˆØ�‰˜Ÿ™×*Ñ*Ô+Ø×ÑœRŸX™X f¬c°"·'±'«lÓ;Ô<Ø×ÑœRŸX™XØGÜ�×$Ñ$Ó%ó'õ 	(r4   c                 ód   — | j                  «       }|j                  «        |j                  «        y r)   )rE   rN  )r2   rE   s     r   rR  zTestValueRef.test_close”  s   € Ø�y‰y‹{ˆØ�
‰
ŒØ�
‰
�r4   c                 óö   — | j                  «       j                  d«      }| j                  t        «      j                  d«      }| j                  |j                  «       | j                  |j                  «       y r@  )rA   re  Úasm_sum_declarerÖ  Úis_declarationr  )r2   ÚdefinedÚdeclareds      r   Útest_is_declarationz TestValueRef.test_is_declaration™  sW   € Ø—+‘+“-×,Ñ,¨UÓ3ˆØ—;‘;œÓ/×<Ñ<¸UÓCˆØ×Ñ˜×/Ñ/Ô0Ø�‰˜×/Ñ/Õ0r4   c                 óÒ   — | j                  t        «      }t        |j                  «      }| j	                  t        |«      d«       |D ]  }| j                  |j                  «       Œ y ©Nry  )rA   rQ   r†  r}  r6   r|   r  Ú	is_global)r2   r@   Úgvarsr  s       r   Útest_module_global_variablesz)TestValueRef.test_module_global_variablesŸ  sN   € Ø�k‰kœ'Ó"ˆÜ�S×)Ñ)Ó*ˆØ×Ñœ˜U› QÔ'ÛˆAØ�O‰O˜AŸK™KÕ(ñ r4   c                 ó@  — | j                  «       }t        |j                  «      }| j                  t	        |«      d«       |d   }| j                  |j                  «       | j                  |j                  d«       | j                  t        «      5  |j                   d d d «       | j                  t        «      5  |j                   d d d «       | j                  t        «      5  |j                   d d d «       y # 1 sw Y   Œ^xY w# 1 sw Y   Œ@xY w# 1 sw Y   y xY wr„  )rA   r†  r…  r6   r|   r  Úis_functionrD   râ   r“  ÚinstructionsÚoperandsÚopcode)r2   r@   r‡  r¹   s       r   Útest_module_functionsz"TestValueRef.test_module_functions¦  sÈ   € Ø�k‰k‹mˆÜ�S—]‘]Ó#ˆØ×Ñœ˜U› QÔ'Ø�Q‰xˆØ�‰˜×(Ñ(Ô)Ø×Ñ˜Ÿ™ EÔ*à×ÑœzÕ*Ø×Ò÷ +à×ÑœzÕ*Ø�MŠM÷ +à×ÑœzÕ*Ø�KŠK÷ +Ð*÷	 +Ð*úç*Ð*úç*Ð*ús$   ÂC<Â<DÃ&DÃ<DÄDÄDc                 óT  — | j                  «       }|j                  d«      }| j                  |j                  «       t	        |j
                  «      }| j                  t        |«      d«       | j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   j                  d«       | j                  t        |d   j                  «      d«       | j                  |d   j                  d«       | j                  t        |d   j                  «      d«       | j                  t        «      5  |d   j                   d d d «       | j                  t        «      5  |d   j
                   d d d «       y # 1 sw Y   Œ7xY w# 1 sw Y   y xY w)Nrd  r`   r   r_   ú.1r¢  ú.2)rA   re  r  r·  r†  Ú	argumentsr6   r|   Úis_argumentrD   r    rì  râ   r“  Úblocks)r2   r@   r¹   r²   s       r   Útest_function_argumentsz$TestValueRef.test_function_argumentsµ  s8  € Ø�k‰k‹mˆØ×Ñ Ó&ˆØ�‰˜×(Ñ(Ô)Ü�D—N‘NÓ#ˆØ×Ñœ˜T› AÔ&Ø�‰˜˜Q™×+Ñ+Ô,Ø�‰˜˜Q™×+Ñ+Ô,Ø×Ñ˜˜a™Ÿ™ tÔ,Ø×Ñœ˜T !™WŸ\™\Ó*¨EÔ2Ø×Ñ˜˜a™Ÿ™ tÔ,Ø×Ñœ˜T !™WŸ\™\Ó*¨EÔ2à×ÑœzÕ*Ø�‰G�NŠN÷ +à×ÑœzÕ*Ø�‰G×Ò÷ +Ð*÷ +Ð*úç*Ð*ús   ÅFÅ9FÆFÆF'c                 óâ   — | j                  «       j                  d«      }t        |j                  «      }| j	                  t        |«      d«       |d   }| j                  |j                  «       y )Nrd  r_   r   )rA   re  r†  rÁ  r6   r|   r  Úis_block)r2   r¹   rÁ  rº   s       r   Útest_function_blocksz!TestValueRef.test_function_blocksÇ  sS   € Ø�{‰{‹}×)Ñ)¨%Ó0ˆÜ�d—k‘kÓ"ˆØ×Ñœ˜V› aÔ(Ø�q‘	ˆØ�‰˜Ÿ™Õ'r4   c                 ó<  — | j                  «       j                  d«      }t        t        |j                  «      d   j                  «      }| j                  t        |«      d«       | j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   j                  d«       | j                  |d   j                  d«       | j                  |d   j                  d«       y )Nrd  r   ri  r_   r`   r~   r#   )
rA   re  r†  rÁ  r¸  r6   r|   r  Úis_instructionrº  )r2   r¹   Úinstss      r   Útest_block_instructionsz$TestValueRef.test_block_instructionsÎ  sÔ   € Ø�{‰{‹}×)Ñ)¨%Ó0ˆÜ”T˜$Ÿ+™+Ó& qÑ)×6Ñ6Ó7ˆØ×Ñœ˜U› QÔ'Ø�‰˜˜a™×/Ñ/Ô0Ø�‰˜˜a™×/Ñ/Ô0Ø�‰˜˜a™×/Ñ/Ô0Ø×Ñ˜˜q™Ÿ™¨%Ô0Ø×Ñ˜˜q™Ÿ™¨%Ô0Ø×Ñ˜˜q™Ÿ™¨%Õ0r4   c                 óÊ  — | j                  «       j                  d«      }t        t        |j                  «      d   j                  «      d   }| j                  |j                  d«       t        |j                  «      }| j                  t        |«      d«       | j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   j                  d«       | j                  t        |d   j                  «      d«       | j                  |d   j                  d«       | j                  t        |d   j                  «      d«       y )	Nrd  r   r~   r`   r_   r½  r¢  r¾  )rA   re  r†  rÁ  r¸  r6   rº  r¹  r|   r  Ú
is_operandrD   r    rì  )r2   r¹   r~   r¹  s       r   Útest_instruction_operandsz&TestValueRef.test_instruction_operandsÙ  s  € Ø�{‰{‹}×)Ñ)¨%Ó0ˆÜ”4˜Ÿ™Ó$ QÑ'×4Ñ4Ó5°aÑ8ˆØ×Ñ˜Ÿ™ UÔ+Ü˜Ÿ™Ó%ˆØ×Ñœ˜X›¨Ô*Ø�‰˜ ™×.Ñ.Ô/Ø�‰˜ ™×.Ñ.Ô/Ø×Ñ˜ !™×)Ñ)¨4Ô0Ø×Ñœ˜X a™[×-Ñ-Ó.°Ô6Ø×Ñ˜ !™×)Ñ)¨4Ô0Ø×Ñœ˜X a™[×-Ñ-Ó.°Õ6r4   c                 ó  — t         j                  d   }|dkD  rdndg}| j                  t        «      }|j                  D ]Á  }t        |j                  «      }|j                  dk(  r| j                  ||«       Œ:|j                  dk(  sŒJ| j                  |g «       t        |j                  «      }| j                  t        |d   j                  «      dg«       | j                  t        |d   j                  «      g «       ŒÃ y )	Nr   é   s   memory(read)s   readonlyÚa_readonly_funcÚa_arg0_return_funcs   returnedr_   )
r*   r4  rA   Úasm_attributesr…  r†  Ú
attributesrD   r6   r¿  )r2   ÚverÚreadonly_attrsr@   r¹   Úattrsr²   s          r   Útest_function_attributesz%TestValueRef.test_function_attributesæ  sÔ   € Ü×$Ñ$ QÑ'ˆØ-0°2ªX™/¸;ÐGˆØ�k‰kœ.Ó)ˆØ—M”MˆDÜ˜Ÿ™Ó)ˆEØ�y‰yÐ-Ò-Ø× Ñ  ¨Õ7Ø—‘Ð2Ó2Ø× Ñ  ¨Ô+Ü˜DŸN™NÓ+�Ø× Ñ ¤ d¨1¡g×&8Ñ&8Ó!9¸K¸=ÔIØ× Ñ ¤ d¨1¡g×&8Ñ&8Ó!9¸2Õ>ñ "r4   c                 óÄ  — | j                  «       }| j                  |j                  d«      j                  t        j
                  j                  «       |j                  d«      }| j                  |j                  t        j
                  j                  «       t        |j                  «      d   }| j                  |j                  t        j
                  j                  «       t        |j                  «      d   }| j                  |j                  t        j
                  j                  «       | j                  t        |j                  «      d   j                  t        j
                  j                  «       | j                  t        |j                  «      d   j                  t        j
                  j                  «       | j                  t         «      j                  d«      }t        t        |j                  «      d   j                  «      d   }| j                  t        |j                  «      d   j                  t        j
                  j"                  «       y )NrE   rd  r   r_   rë   )rA   r6   rC   Ú
value_kindr*   Ú	ValueKindÚglobal_variablere  Úfunctionr†  rÁ  Úbasic_blockr¸  Úinstructionr¹  Úconstant_intÚasm_inlineasmÚ
inline_asm)r2   r@   r¹   rº   ÚinstÚ	iasm_funcÚ	iasm_insts          r   Útest_value_kindzTestValueRef.test_value_kindô  s¤  € Ø�k‰k‹mˆØ×Ñ˜×0Ñ0°Ó8×CÑCÜŸ™×7Ñ7ô	9à×Ñ Ó&ˆØ×Ñ˜Ÿ™¬$¯.©.×*AÑ*AÔBÜ�T—[‘[Ó! !Ñ$ˆØ×Ñ˜×)Ñ)¬4¯>©>×+EÑ+EÔFÜ�E×&Ñ&Ó'¨Ñ*ˆØ×Ñ˜Ÿ™¬$¯.©.×*DÑ*DÔEØ×Ñœ˜dŸm™mÓ,¨QÑ/×:Ñ:ÜŸ™×4Ñ4ô	6à×Ñœ˜dŸm™mÓ,¨QÑ/×:Ñ:ÜŸ™×3Ñ3ô	5ð —K‘K¤Ó.×;Ñ;¸EÓBˆ	Üœ˜i×.Ñ.Ó/°Ñ2×?Ñ?Ó@ÀÑCˆ	Ø×Ñœ˜i×0Ñ0Ó1°!Ñ4×?Ñ?ÜŸ™×2Ñ2õ	4r4   c                 óî  — | j                  «       }| j                  |j                  d«      j                  «       d}|j                  D ]˜  }| j                  |j                  «       |j
                  D ]l  }| j                  |j                  «       |j                  D ]@  }| j                  |j                  «       |j                  D ]  }|j                  sŒ|dz  }Œ ŒB Œn Œš | j                  |d«       y )NrE   r   r_   )
rA   r  rC   Úis_constantr…  rÁ  rÖ  r¸  r¹  r6   )r2   r@   Úconstant_operandsr¹   rº   rá  Úops          r   Útest_is_constantzTestValueRef.test_is_constant  sÉ   € Ø�k‰k‹mˆØ�‰˜×/Ñ/°Ó7×CÑCÔDØÐØ—M”MˆDØ�O‰O˜D×,Ñ,Ô-ØŸœ�Ø× Ñ  ×!2Ñ!2Ô3Ø!×.Ô.�DØ×$Ñ$ T×%5Ñ%5Ô6Ø"Ÿmœm˜ØŸ>›>Ø-°Ñ2Ñ-ñ ,ñ /ñ %ð "ð 	×ÑÐ*¨AÕ.r4   c                 ón  — | j                  «       }|j                  d«      }t        t        |j                  «      d   j                  «      }| j                  |d   j                  d«       t        |d   j                  «      }| j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   j                  «       d«       | j                  t        «      5  |d   j                  «        d d d «       | j                  t        «      }|j                  d«      }t        t        |j                  «      d   j                  «      }t        |d   j                  «      d   }t        |d   j                  «      d   }| j                  |j                  «       d«       | j                  |j                  d¬«      d	«       |j                  d
¬«      }t        j!                  |j#                  dd«      dd¬«      }| j                  |d	«       y # 1 sw Y   �Œ xY w)Nrd  r   r_   r~   r`   rj  T)Ú
signed_intrÅ  Frè  Úlittle)Úsigned)rA   re  r†  rÁ  r¸  r6   rº  r¹  r  ræ  rÖ  Úget_constant_valuerâ   r“  Úasm_sum3ÚintÚ
from_bytesÚto_bytes)	r2   r@   r¹   rÈ  r¹  Úposint64Únegint64Úas_u64Úas_i64s	            r   Útest_constant_intzTestValueRef.test_constant_int  sÏ  € Ø�k‰k‹mˆØ×Ñ Ó&ˆÜ”T˜$Ÿ+™+Ó& qÑ)×6Ñ6Ó7ˆØ×Ñ˜˜q™Ÿ™¨%Ô0Ü˜˜a™×)Ñ)Ó*ˆØ�‰˜ ™×/Ñ/Ô0Ø×Ñ˜ !™×0Ñ0Ô1Ø×Ñ˜ !™×7Ñ7Ó9¸1Ô=Ø×ÑœzÕ*Ø�Q‰K×*Ñ*Ô,÷ +ð �k‰kœ(Ó#ˆØ×Ñ Ó&ˆÜ”T˜$Ÿ+™+Ó& qÑ)×6Ñ6Ó7ˆÜ˜˜a™×)Ñ)Ó*¨1Ñ-ˆÜ˜˜a™×)Ñ)Ó*¨1Ñ-ˆØ×Ñ˜×4Ñ4Ó6¸Ô:Ø×Ñ˜×4Ñ4ÀÐ4ÓEÀrÔJð ×,Ñ,¸Ð,Ó>ˆÜ—‘ §¡°°8Ó <¸hØ'+ð  ó -ˆà×Ñ˜ Õ$÷ +Ñ*ús   Ã8H*È*H4c                 óä  — | j                  t        «      }|j                  d«      }t        t        |j                  «      d   j
                  «      }| j                  t        |«      d«       | j                  |d   j                  d«       t        |d   j                  «      }| j                  |d   j                  «       | j                  |d   j                  «       d«       | j                  |d   j                  «       | j                  |d   j                  «       d«       | j                  t        «      }|j                  d«      }t        t        |j                  «      d   j
                  «      d   }t        |j                  «      }| j                  t         «      5  |d   j                  «        d d d «       | j                  |d   j                  d¬	«      d«       y # 1 sw Y   Œ/xY w)
Nrë   r   r`   r´   g        r_   g…ëQ¸	@T)Úround_fp)rA   r?  re  r†  rÁ  r¸  r6   r|   rº  r¹  r  ræ  ÚassertAlmostEqualrî  Úasm_double_inaccuraterâ   r“  )r2   r@   r¹   rÈ  r¹  rá  s         r   Útest_constant_fpzTestValueRef.test_constant_fp2  sƒ  € Ø�k‰kÔ+Ó,ˆØ×Ñ Ó&ˆÜ”T˜$Ÿ+™+Ó& qÑ)×6Ñ6Ó7ˆØ×Ñœ˜U› QÔ'Ø×Ñ˜˜q™Ÿ™¨&Ô1Ü˜˜a™×)Ñ)Ó*ˆØ�‰˜ ™×/Ñ/Ô0Ø×Ñ˜x¨™{×=Ñ=Ó?ÀÔEØ�‰˜ ™×/Ñ/Ô0Ø×Ñ˜x¨™{×=Ñ=Ó?ÀÔFà�k‰kÔ/Ó0ˆØ×Ñ Ó&ˆÜ”D˜Ÿ™Ó% aÑ(×5Ñ5Ó6°qÑ9ˆÜ˜Ÿ™Ó&ˆØ×ÑœzÕ*Ø�Q‰K×*Ñ*Ô,÷ +à×Ñ˜x¨™{×=Ñ=ÀtÐ=ÓLÈaÕP÷ +Ð*ús   Æ$G&Ç&G/c                 óR  — | j                  t        «      }|j                  d«      }t        t        |j                  «      d   j
                  «      d   }t        |j                  «      d   }| j                  |j                  «       | j                  |j                  «       d«       y )NrV  r   zptr null)rA   Úasm_null_constantre  r†  rÁ  r¸  r¹  r  ræ  r6   rî  )r2   r@   r¹   rá  Úargs        r   Útest_constant_as_stringz$TestValueRef.test_constant_as_stringF  s€   € Ø�k‰kÔ+Ó,ˆØ×Ñ Ó&ˆÜ”D˜Ÿ™Ó% aÑ(×5Ñ5Ó6°qÑ9ˆÜ�4—=‘=Ó! !Ñ$ˆØ�‰˜Ÿ™Ô(Ø×Ñ˜×/Ñ/Ó1°:Õ>r4   c                 ó  — | j                  t        «      }|j                  d«      }t        |j                  «      }t        |d   j
                  «      }| j                  |d   j                  «       | j                  |d   j                  d«       t        |d   j                  «      }| j                  t        |«      d«       | j                  |d   j                  «       | j                  |d   j                  «       | j                  |d   |d   «       | j                  |d   |d   «       | j                  |d   j                  d«       | j                  t        «      5  |d   j                   d d d «       y # 1 sw Y   y xY w)Nrë   éÿÿÿÿr   Úphir`   r_   )rA   Úasm_phi_blocksre  r†  rÁ  r¸  r  rÇ  r6   rº  Úincoming_blocksr|   rÄ  r  râ   r“  )r2   r@   r¹   rÁ  r¸  r  s         r   Útest_incoming_phi_blocksz%TestValueRef.test_incoming_phi_blocksN  s>  € Ø�k‰kœ.Ó)ˆØ×Ñ Ó&ˆÜ�d—k‘kÓ"ˆÜ˜F 2™J×3Ñ3Ó4ˆØ�‰˜ Q™×6Ñ6Ô7Ø×Ñ˜ a™×/Ñ/°Ô7ä˜|¨A™×>Ñ>Ó?ˆØ×Ñœ˜_Ó-¨qÔ1Ø�‰˜¨Ñ*×3Ñ3Ô4Ø�‰˜¨Ñ*×3Ñ3Ô4à×Ñ˜¨Ñ+¨V°B©ZÔ8Ø×Ñ˜¨Ñ+¨V°A©YÔ7ð 	×Ñ˜L¨™O×2Ñ2°EÔ:Ø×ÑœzÕ*Ø˜‰O×+Ò+÷ +×*Ñ*ús   Å$E=Å=FN)rN   rO   rP   rL  rW  r‚  rˆ  rŽ  r•  r˜  r�  r   r£  r¥  r©  rR  r°  rµ  r»  rÂ  rÅ  rÉ  rÌ  rÖ  rä  ré  r÷  rü  r   r  rR   r4   r   rx  rx  2  sŽ   „ ò<ò
.ò
9ò
?ò
EòLò(ò
0òBò)òFò
(òò
1ò)òòò$(ò	1ò7ò?ò4ò(/ò %ò4Qò(?ó,r4   rx  c                   óN   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚTestTypeRefc                 óÀ  — | j                  «       }|j                  d«      }| j                  t        |j                  «      d«       |j                  d«      }| j                  t        |«      d«       t        |j                  «      }| j                  t        |«      d«       | j                  t        |d   «      d«       | j                  t        |d   «      d	«       y )
NrE   r¢  rl  z+%struct.glob_type = type { i64, [2 x i64] }r`   r   Úi64r_   z	[2 x i64])	rA   rC   r6   r    rí  rn  r†  Úelementsr|   )r2   r@   rE   Úglob_struct_typer  s        r   rL  zTestTypeRef.test_strf  s½   € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×Ñœ˜T×3Ñ3Ó4°eÔ<Ø×.Ñ.Ð/AÓBÐØ×ÑœÐ-Ó.ØFô	Hô Ð(×1Ñ1Ó2ˆØ×Ñœ˜X›¨Ô*Ø×Ñœ˜X a™[Ó)¨5Ô1Ø×Ñœ˜X a™[Ó)¨;Õ7r4   c                 óè  — | j                  «       }|j                  d«      }| j                  |j                  j                  t
        j                  j                  «       | j                  |j                  j                  «       |j                  d«      }| j                  |j                  j                  t
        j                  j                  «       | j                  |j                  j                  «       |j                  }| j                  |j                  t
        j                  j                  «       | j                  |j                  «       |j                  \  }}| j                  |j                  t
        j                  j                  «       | j                  |j                  t
        j                  j                  «       | j                  |j                   «       |j#                  d«      }|j                  \  }}	| j                  |	j                  t
        j                  j$                  «       | j                  |	j&                  «       |j)                  d«      j                  }
| j                  |
j                  t
        j                  j                  «       |j)                  d«      j                  }| j                  |j                  t
        j                  j*                  «       y )NrE   r|  ústruct.glob_type_vecrd  )rA   rC   r6   rì  Ú	type_kindr*   ÚTypeKindÚpointerr  r¨  rí  ÚstructÚ	is_structr  ÚintegerÚarrayÚis_arrayrn  ÚvectorÚ	is_vectorre  rÛ  )r2   r@   rE   r|  ÚstypeÚstype_aÚstype_bÚglob_vec_struct_typer‡   Úvector_typeÚfuncptrÚfunctypes               r   Útest_type_kindzTestTypeRef.test_type_kinds  sý  € Ø�k‰k‹mˆØ×&Ñ& vÓ.ˆØ×Ñ˜Ÿ™×,Ñ,¬d¯m©m×.CÑ.CÔDØ�‰˜Ÿ	™	×,Ñ,Ô-à×-Ñ-¨mÓ<ˆØ×Ñ˜×)Ñ)×3Ñ3´T·]±]×5JÑ5JÔKØ�‰˜×(Ñ(×3Ñ3Ô4à×-Ñ-ˆØ×Ñ˜Ÿ™¬$¯-©-×*>Ñ*>Ô?Ø�‰˜Ÿ™Ô(à Ÿ>™>Ñˆ�Ø×Ñ˜×*Ñ*¬D¯M©M×,AÑ,AÔBØ×Ñ˜×*Ñ*¬D¯M©M×,?Ñ,?Ô@Ø�‰˜×(Ñ(Ô)à"×2Ñ2Ð3IÓJÐØ-×6Ñ6‰ˆˆ;Ø×Ñ˜×.Ñ.´·±×0DÑ0DÔEØ�‰˜×-Ñ-Ô.à×"Ñ" 5Ó)×.Ñ.ˆØ×Ñ˜×*Ñ*¬D¯M©M×,AÑ,AÔBØ×#Ñ# EÓ*×<Ñ<ˆØ×Ñ˜×+Ñ+¬T¯]©]×-CÑ-CÕDr4   c                 ó  — | j                  «       }|j                  d«      }|j                  \  }}| j                  |j                  d«       | j                  t        «      5  |j                   d d d «       y # 1 sw Y   y xY w)Nrl  r`   )rA   rn  r  r6   Úelement_countrâ   r“  )r2   r@   r  r‡   Ú
array_types        r   Útest_element_countzTestTypeRef.test_element_count�  sg   € Ø�k‰k‹mˆØ×.Ñ.Ð/AÓBÐØ(×1Ñ1‰ˆˆ:Ø×Ñ˜×1Ñ1°1Ô5Ø×ÑœzÕ*Ø×*Ò*÷ +×*Ñ*ús   Á"A8Á8Bc                 ó„  — | j                  «       }|j                  d«      }|j                  d«      }|j                  \  }}|j                  \  }}| j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       | j                  |j                  d«       y )Nrl  r  é@   é€   r   )rA   rn  r  r6   Ú
type_width)r2   r@   r  r  Úinteger_typer#  r‡   r  s           r   Útest_type_widthzTestTypeRef.test_type_width˜  s«   € Ø�k‰k‹mˆØ×.Ñ.Ð/AÓBÐØ"×2Ñ2Ð3IÓJÐØ#3×#<Ñ#<Ñ ˆ�jØ-×6Ñ6‰ˆˆ;Ø×Ñ˜×0Ñ0°"Ô5Ø×Ñ˜×/Ñ/°Ô8ð 	×ÑÐ)×4Ñ4°aÔ8Ø×Ñ˜×.Ñ.°Õ2r4   c                 óL  — | j                  t        «      }|j                  d«      }|j                  }| j	                  |j
                  «       | j                  t        «      }|j                  d«      }|j                  }| j                  |j
                  «       | j	                  |j                  j                  «       | j                  t        «      5 }|j                  j
                   d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NÚvarargrd  zType ptr is not a function)rA   Úasm_vararg_declarere  rí  r  Úis_function_varargr¬  rÖ  rì  r¨  râ   r“  rå   r    rä   )r2   r@   r¹   Údecltyper”  s        r   Útest_vararg_functionz TestTypeRef.test_vararg_function¥  sØ   € à�k‰kÔ,Ó-ˆØ×Ñ Ó)ˆØ×)Ñ)ˆØ�‰˜×3Ñ3Ô4à�k‰kœ/Ó*ˆØ×Ñ Ó&ˆØ×)Ñ)ˆØ×Ñ˜×4Ñ4Ô5ð 	�‰˜Ÿ	™	×,Ñ,Ô-Ø×ÑœzÔ*¨fØ�I‰I×(Ò(÷ +à�‰Ð2´C¸×8HÑ8HÓ4IÕJ÷ +Ð*ús   ÃDÄD#c                 ó2  — | j                  «       }t        |j                  «      \  }| j                  |j                  j
                  t        j                  j                  «       | j                  |j                  j                  «       |j                  }| j                  |j
                  t        j                  j                  «       | j                  |j                  «       |j                  t        j                   «      }| j#                  |t        j$                  «       | j                  |j&                  t        j(                  d«      t        j(                  d«      f«       | j                  |j*                  t        j(                  d«      «       y ©Nrê   )rA   r†  r…  r6   rì  r  r*   r  r  rÖ  r·  rí  rÛ  r  Úas_irr	   Úglobal_contextr  r­   r²   rì   Úreturn_type)r2   r@   rð   r¸   Útyirs        r   Útest_function_typeref_as_irz'TestTypeRef.test_function_typeref_as_ir·  s  € Ø�k‰k‹mˆä�C—M‘MÓ"‰ˆà×Ñ˜Ÿ™×*Ñ*¬D¯M©M×,AÑ,AÔBØ×Ñ˜Ÿ™×,Ñ,Ô-à×#Ñ#ˆØ×Ñ˜Ÿ™¬¯©×)?Ñ)?Ô@Ø�‰˜×(Ñ(Ô)à�z‰zœ"×+Ñ+Ó,ˆØ×Ñ˜d¤B§O¡OÔ4Ø×Ñ˜Ÿ™¤R§Z¡Z°£^´R·Z±ZÀ³^Ð$DÔEØ×Ñ˜×)Ñ)¬2¯:©:°b«>Õ:r4   c                 óž  — t        j                  t        j                  «       d«      }t        j                  «       }t        j                  ||d«      }| j                  t        |«      «      }|j                  d«      }|j                  }| j                  |j                  |j                  t         j                  «      j                  «       y )NrR   rë   )r	   r­   ÚVoidTyper®   r¯   rA   r    re  rí  r6   r5  r3  r4  )r2   r¸   Úirmodrð   r@   Úgvtys         r   Útest_void_typeref_as_irz#TestTypeRef.test_void_typeref_as_irÈ  s‘   € ä�‰œrŸ{™{›}¨bÓ1ˆÜ—	‘	“ˆÜ�[‰[˜  eÓ,ˆØ�k‰kœ#˜e›*Ó%ˆØ×Ñ˜eÓ$ˆØ×#Ñ#ˆØ×Ñ˜×)Ñ)ØŸ™¤B×$5Ñ$5Ó6×BÑBõ	Dr4   c                 óÆ  ‡— ddl m} t        j                  «       Šddh}i }d„ }||d<   d„ }||d<   d	„ }||d
<   d„ }||d<   ˆfd„}||d<   d„ }	|	|d<   d„ }
|
|d<   d„ }||d<   | j	                  |j                  «       D �ch c]  }|j                  ’Œ c}t        |j                  «       «      t        |«      z  «       |j                  «       D ]ÿ  \  }}|j                  |v rŒ ||j                     «       D ]Ó  }| j                  |›d|› �«      5  t        j                  ‰¬«      }t        j                  ||d¬«       t        |«      }t        j                  |«      }|j                  d«      }|j                   }|j#                  t        j                  «       «      }| j	                  ||«       | j%                  ||«       d d d «       ŒÕ �Œ y c c}w # 1 sw Y   ŒèxY w)Nr   )Ú_TypeKindToIRTyperÛ  Úvoidc               3   ó8   K  — t        j                  «       –— y ­wr)   )r	   ÚHalfTyperR   r4   r   Ú
maker_halfz9TestTypeRef.test_global_typeref_as_ir.<locals>.maker_halfÞ  s   è ø€ Ü—+‘+“-Óùó   ‚Úhalfc               3   ó8   K  — t        j                  «       –— y ­wr)   )r	   r¬   rR   r4   r   Úmaker_floatz:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_floatã  s   è ø€ Ü—,‘,“.Ó ùrC  Úfloatc               3   ó8   K  — t        j                  «       –— y ­wr)   )r	   r«   rR   r4   r   Úmaker_doublez;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_doubleè  s   è ø€ Ü—-‘-“/Ó!ùrC  Údoublec               3   ó:   K  — t        j                  d«      –— y ­wr2  )r	   rì   rR   r4   r   Úmaker_integerz<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_integerí  s   è ø€ Ü—*‘*˜R“.Ó ùs   ‚r  c               3   ó2  •K  — t        j                  t        j                  d«      «      –— ‰j                  d«      j	                  «       –— ‰j                  d«      } | j                  t        j                  d«      «       | j	                  «       –— y ­w)Nrè  ÚmyclassÚmyclass2)r	   ÚPointerTyperì   Úget_identified_typeÚ
as_pointerÚset_body)rO  Úctxs    €r   Úmaker_pointerz<TestTypeRef.test_global_typeref_as_ir.<locals>.maker_pointerò  sm   øè ø€ Ü—.‘.¤§¡¨A£Ó/Ò/à×)Ñ)¨)Ó4×?Ñ?ÓAÒAà×.Ñ.¨zÓ:ˆHØ×ÑœbŸj™j¨›mÔ,Ø×%Ñ%Ó'Ó'ùs   ƒBBr  c               3   ób   K  — t        j                  t        j                  d«      d«      –— y ­w)Nrè  é{   )r	   Ú	ArrayTyperì   rR   r4   r   Úmaker_arrayz:TestTypeRef.test_global_typeref_as_ir.<locals>.maker_arrayý  s   è ø€ Ü—,‘,œrŸz™z¨!›}¨cÓ2Ó2ùs   ‚-/r  c               3   ó`   K  — t        j                  t        j                  «       d«      –— y ­w)Nr`   )r	   Ú
VectorTyper¬   rR   r4   r   Úmaker_vectorz;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_vector  s   è ø€ Ü—-‘-¤§¡£°Ó2Ó2ùs   ‚,.r  c               3   ó  K  — t        j                  t        j                  «       t        j                  d«      g«      –— t        j                  t        j                  «       t        j                  d«      gd¬«      –— y ­w)Nr&  T©Úpacked)r	   ÚLiteralStructTyper¬   rì   rR   r4   r   Úmaker_structz;TestTypeRef.test_global_typeref_as_ir.<locals>.maker_struct  sU   è ø€ Ü×&Ñ&¬¯©«¼¿
¹
À2»Ð'GÓHÒHÜ×&Ñ&¬¯©«¼¿
¹
À2»Ð'GØ.2ô4ó 4ùs   ‚B Br  z -> r°  rr  rª   )Úllvmlite.binding.typerefr>  r	   ÚContextr6   ÚkeysrD   rw   r  ÚsubTestr®   ÚGlobalVariabler    r*   r=   rC   rí  r3  r  )r2   r>  ÚskippedÚmakersrB  rF  rI  rL  rU  rY  r\  ra  Úxr  ÚirtypeÚtyr:  r>   r@   rr  r;  rA  rT  s                         @r   Útest_global_typeref_as_irz%TestTypeRef.test_global_typeref_as_irÓ  së  ø€ Ý>Ü�j‰j‹lˆð Øð
ˆð
 ˆò	 ð $ˆˆv‰ò	!ð &ˆˆw‰ò	"ð (ˆˆxÑò	!ð *ˆˆyÑô	(ð *ˆˆyÑò	3ð &ˆˆw‰ò	3ð (ˆˆxÑò	4ð
 (ˆˆxÑð 	×ÑÐ*;×*@Ñ*@Ô*BÓCÑ*B Q˜!Ÿ&›&Ð*BÑCÜ˜VŸ[™[›]Ó+¬c°'«lÑ:ô	<ð "3×!8Ñ!8Ö!:ÑˆI�vØ�~‰~ Ñ(ØØ,�f˜YŸ^™^Ñ,Ö.�Ø—\‘\ Y M°°b°TÐ":Õ;ÜŸI™I¨cÔ2�EÜ×%Ñ% e¨R°dÕ;Ü˜e›*�CÜ×-Ñ-¨cÓ2�CØ×0Ñ0°Ó6�BØ×/Ñ/�DØŸ*™*¤R§Z¡Z£\Ó2�CØ×$Ñ$ S¨"Ô-Ø×)Ñ)¨#¨vÔ6÷ <Ð;ò /ñ ";ùò	 D÷ <Ð;ús   ÂGÄB3GÇG c                 ó~  — t        j                  |«      }|j                  |«      }|j                  }t	        j
                  «       }|j                  |¬«      }t	        j                  |¬«      }t	        j                  |||j                  ¬«      }	t	        j                  ||d¬«      }
t	        j                  |
j                  «       «      }|j                  |	|
j                  «       |j                  «        t        j                  t        |«      «      }| j!                  |j                  |	j                  «      j"                  d¬«       |j%                  |d¬«       | j'                  t)        t+        |j,                  «      «      t)        t+        |j,                  «      «      d	z   d
¬«       | j/                  |j                  |	j                  «      j"                  d¬«       | j'                  |j                  |	j                  «      j                  |j                  |
j                  «      j                  d¬«       y )N)Úir_ctxr°  rª   Úwrapperzdeclfn must not have a body)rQ  Tr�  r_   z$the only new function is the wrapperzdeclfn must have a body nowz.declfn and wrapfn must have the same llvm Type)r*   r=   re  rí  r	   rc  r3  r®   r¯   rD   r±   r°   Úcallr²   Úret_voidr    r  r­  r˜  r6   r|   r†  r…  rÖ  )r2   r>   Útarget_symbolr@   ÚcppfnÚ	cppfntypeÚ
my_contextrk  Úwrapper_modÚdeclfnÚwrapfnr»   Únew_mods                r   Ú!_check_typeref_as_ir_for_wrappersz-TestTypeRef._check_typeref_as_ir_for_wrappers"  s½  € ä×!Ñ! #Ó&ˆØ× Ñ  Ó/ˆØ×+Ñ+ˆ	ô —Z‘Z“\ˆ
Ø�_‰_ Jˆ_Ó/ˆô —i‘i¨
Ô3ˆä—‘˜[¨"°5·:±:Ô>ˆä—‘˜[¨"°9Ô=ˆÜ—,‘,˜v×8Ñ8Ó:Ó;ˆà�‰�V˜VŸ[™[Ô)Ø×ÑÔä×%Ñ%¤c¨+Ó&6Ó7ˆØ�‰˜×,Ñ,¨V¯[©[Ó9×HÑHØ9ð 	ô 	;ð 	�‰˜ dˆÔ+Ø×ÑœœT '×"3Ñ"3Ó4Ó5ÜœT #§-¡-Ó0Ó1°AÑ5ØCð 	ô 	Eð 	×Ñ˜×-Ñ-¨f¯k©kÓ:×IÑIØ:ð 	ô 	<à×Ñ˜×-Ñ-¨f¯k©kÓ:×LÑLØ ×-Ñ-¨f¯k©kÓ:×LÑLØMð 	õ 	Or4   c                 ó0   — | j                  t        d«       y)ztExercise extracting C++ defined class types.
        Contains both opaque and non-opaque class definitions.
        Ú_Z3fooP7MyClass14MyClassDefinedN)rz  Úasm_cpp_classr1   s    r   Ú,test_typeref_as_ir_for_wrappers_of_cpp_classz8TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_classE  s   € ð 	×.Ñ.ÜØ-õ	
r4   c                 ó0   — | j                  t        d«       y)z¨Exercise extracting C++ struct types that are passed as vectors.

        IA64 ABI on x86_64 will put struct with two floats as
        a vector of two floats.
        Ú_Z3foo8Vector2DPS_N)rz  Úasm_cpp_vectorr1   s    r   Ú4test_typeref_as_ir_for_wrappers_of_cpp_vector_structz@TestTypeRef.test_typeref_as_ir_for_wrappers_of_cpp_vector_structN  s   € ð 	×.Ñ.ÜØ õ	
r4   N)rN   rO   rP   rL  r   r$  r*  r0  r7  r<  rl  rz  r~  r‚  rR   r4   r   r  r  d  s@   „ ò8òEò:+ò3òKò$;ò"	DòM7ò^!OòF
ó	
r4   r  c                   ó0   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
TestTargetc                 óv  — t         j                  j                  }| j                  t        «      5 } |d«       d d d «       | j                  dt        j                  «      «       t        j                  «       } ||«      }| j                  |j                  |«       |j                  «        y # 1 sw Y   ŒwxY w)Nr|  z(No available targets are compatible with)r*   rI   rž   râ   rŸ   rå   r    rä   r<   r6   r:   rN  )r2   r’  ræ   r:   rL   s        r   Útest_from_triplezTestTarget.test_from_triple\  s…   € Ü�K‰K×#Ñ#ˆØ×Ñœ|Ô,°ÙˆhŒK÷ -à�‰Ð@Ü˜"Ÿ,™,Ó'ô	)ä×(Ñ(Ó*ˆÙ�6“ˆØ×Ñ˜Ÿ™¨Ô/Ø�‰�÷ -Ð,ús   °	B/Â/B8c                 óâ   — t         j                  j                  t        j                  «       «      }|j	                  ddddd«       t        j
                  «       }|j	                  |dddd«       y )NrÄ   r_   r  )r*   rI   rž   r<   rK   r  )r2   rL   r   s      r   Útest_create_target_machinez%TestTarget.test_create_target_machineg  sY   € Ü—‘×(Ñ(¬×)@Ñ)@Ó)BÓCˆà×$Ñ$ R¨¨Q°	¸9ÔEä×$Ñ$Ó&ˆØ×$Ñ$ S¨"¨a°¸IÕFr4   c                 ó.  — t         j                  j                  t        j                  «       «      }t         j                  j	                  «       }| j                  |j                  t        «       | j                  |j                  |j                  «       y r)   )	r*   rI   rž   r<   rJ   r  rD   r    r6   ©r2   ÚtÚus      r   rW  zTestTarget.test_nameo  s]   € Ü�K‰K×#Ñ#¤D×$;Ñ$;Ó$=Ó>ˆÜ�K‰K×+Ñ+Ó-ˆØ×Ñ˜aŸf™f¤cÔ*Ø×Ñ˜Ÿ™ §¡Õ(r4   c                 ó.  — t         j                  j                  t        j                  «       «      }t         j                  j	                  «       }| j                  |j                  t        «       | j                  |j                  |j                  «       y r)   )	r*   rI   rž   r<   rJ   r  Údescriptionr    r6   rŠ  s      r   Útest_descriptionzTestTarget.test_descriptionu  s]   € Ü�K‰K×#Ñ#¤D×$;Ñ$;Ó$=Ó>ˆÜ�K‰K×+Ñ+Ó-ˆØ×Ñ˜aŸm™m¬SÔ1Ø×Ñ˜Ÿ™¨¯©Õ6r4   c                 óì   — t         j                  j                  t        j                  «       «      }t	        |«      }| j                  |j                  |«       | j                  |j                  |«       y r)   )r*   rI   rž   r<   r    rå   rD   rŽ  )r2   rL   rç   s      r   rL  zTestTarget.test_str{  sN   € Ü—‘×(Ñ(¬×)@Ñ)@Ó)BÓCˆÜ�‹KˆØ�‰�f—k‘k 1Ô%Ø�‰�f×(Ñ(¨!Õ,r4   c                 óf  — dt         j                  j                  dddddd¬«      fd	t         j                  j                  dddddd¬«      fd
t         j                  j                  dddddd¬«      fdt         j                  j                  dddddd¬«      fdt         j                  j                  dddddd¬«      fdt         j                  j                  dddddd¬«      fdt         j                  j                  dddddd¬«      fdt         j                  j                  dddddd¬«      fdt         j                  j                  d dd!d"dd#¬«      fd$t         j                  j                  d%ddd&dd'¬«      fg
}|D ].  }|\  }}t        j                  |«      }| j	                  ||«       Œ0 y )(Nzx86_64-scei-ps4Úx86_64rÄ   ÚsceiÚps4ÚunknownÚELF)ÚArchÚSubArchÚVendorÚOSÚEnvÚObjectFormatzx86_64-sie-ps4zpowerpc-dunno-notsureÚpowerpczpowerpcspe-unknown-freebsdÚspeÚfreebsdzarmv6hl-none-linux-gnueabiÚarmÚv6hlrU   Úgnueabizi686-unknown-linux-gnuÚi386Úgnuzi686-apple-macosxÚappleÚmacosxÚMachOzi686-dunno-win32ÚwindowsÚmsvcÚCOFFzs390x-ibm-zosÚs390xÚibmÚzosÚGOFFzwasm64-wasiÚwasm64ÚwasiÚWasm)r*   ÚtargetsÚTripleÚget_triple_partsr6   )r2   ÚcasesÚcaseÚ
triple_strÚ
triple_objrÈ  s         r   Útest_get_parts_from_triplez%TestTarget.test_get_parts_from_triple�  s+  € ð Ü�\‰\× Ñ  h¸Ø(.°5Ø%.¸Uð !ó DðEð Ü�\‰\× Ñ  h¸Ø(.°5Ø%.¸Uð !ó DðEð %Ü�\‰\× Ñ  i¸Ø(1°iØ%.¸Uð !ó DðEð *Ü�\‰\× Ñ  i¸Ø(1°iØ%.¸Uð !ó DðEð *Ü�\‰\× Ñ  e°VØ(1°gØ%.¸Uð !ó DðEð &Ü�\‰\× Ñ  f°bØ(1°gØ%*¸ð !ó @ðAð !Ü�\‰\× Ñ  f°bØ(/°HØ%.¸Wð !ó FðGð  Ü�\‰\× Ñ  f°bØ(1°iØ%+¸&ð !ó BðCð Ü�\‰\× Ñ  g°rØ(-°%Ø%.¸Vð !ó EðFð Ü�\‰\× Ñ  h¸Ø(1°fØ%.¸Vð !ó EðFðK)
ˆóV ˆDØ%)Ñ"ˆJ˜
Ü×'Ñ'¨
Ó3ˆCà×Ñ˜S *Õ-ñ	 r4   N)	rN   rO   rP   r†  rˆ  rW  r�  rL  r¹  rR   r4   r   r„  r„  Z  s!   „ ò	òGò)ò7ò-ó1.r4   r„  c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestTargetDatac                 ó,   — t        j                  d«      S )Nz%e-m:e-i64:64-f80:128-n8:16:32:64-S128)r*   Úcreate_target_datar1   s    r   rã  zTestTargetData.target_data·  s   € Ü×&Ñ&Ð'NÓOÐOr4   c                 óš   — | j                  «       }| j                  «       }| j                  |j                  |j                  «      d«       y )Nrè  )rã  rE   r6   rë  rì  ©r2   rä  rE   s      r   Útest_get_abi_sizez TestTargetData.test_get_abi_sizeº  s8   € Ø×ÑÓˆØ�y‰y‹{ˆØ×Ñ˜Ÿ™¨¯©Ó3°QÕ7r4   c                 ó  — | j                  «       }| j                  «       }| j                  |j                  |j                  «      d«       | j                  d«      }| j                  |j                  |j                  «      d«       y )Nry  r|  ré  )rã  rE   r6   rë  rí  r¿  s      r   Útest_get_pointee_abi_sizez(TestTargetData.test_get_pointee_abi_size¿  sg   € Ø×ÑÓˆà�y‰y‹{ˆØ×Ñ˜Ÿ™¨×)?Ñ)?Ó@À!ÔDà�y‰y˜Ó'ˆØ×Ñ˜Ÿ™¨×)?Ñ)?Ó@À"ÕEr4   c                 ór  — | j                  «       }| j                  d«      }| j                  t        «      5  |j	                  |j
                  d«       d d d «       |j                  }| j                  |j	                  |d«      d«       | j                  |j	                  |d«      d«       y # 1 sw Y   ŒZxY w)Nr|  r   r_   rè  )rã  rE   râ   r“  Úget_element_offsetrì  rí  r6   )r2   rä  rE   Ústruct_types       r   Útest_get_struct_element_offsetz-TestTargetData.test_get_struct_element_offsetÈ  s•   € Ø×ÑÓˆØ�y‰y˜Ó'ˆà×ÑœzÕ*Ø×!Ñ! $§)¡)¨QÔ/÷ +ð ×,Ñ,ˆØ×Ñ˜×.Ñ.¨{¸AÓ>ÀÔBØ×Ñ˜×.Ñ.¨{¸AÓ>ÀÕB÷ +Ð*ús   ·B-Â-B6N)rN   rO   rP   rã  rÀ  rÂ  rÆ  rR   r4   r   r»  r»  µ  s   „ òPò8ò
Fó	Cr4   r»  c                   ó   — e Zd Zd„ Zy)ÚTestTargetMachinec                 ó  — | j                  d¬«      }|j                  }| j                  «       }|j                  d«      }t        j
                  dk  rdnd}| j                  |j                  |j                  «      |«       y )NFrG   rE   rç  ry  rè  )	rM   rã  rA   rC   r”   rê  r6   rë  rì  )r2   Útmrä  r@   rï  rò  s         r   Útest_target_data_from_tmz*TestTargetMachine.test_target_data_from_tmÖ  sh   € Ø× Ñ  UÐ Ó+ˆØ�^‰^ˆØ�k‰k‹mˆØ×(Ñ(¨Ó0ˆäŸK™K¨'Ò1‘q°qˆØ×Ñ˜Ÿ™¨¯©Ó5°|ÕDr4   N)rN   rO   rP   rË  rR   r4   r   rÈ  rÈ  Ô  s   „ óEr4   rÈ  c                   óf   — e Zd Zd„ Z ej
                   ej                  «       dv d«      d„ «       Zy)Ú	TestDylibc                 ó‚   — | j                  t        «      5  t        j                  d«       d d d «       y # 1 sw Y   y xY w)Nzzzzasdkf;jasd;l)râ   rŸ   r*   Úload_library_permanentlyr1   s    r   Útest_bad_libraryzTestDylib.test_bad_libraryâ  s+   € Ø×Ñœ|Õ,Ü×)Ñ)Ð*;Ô<÷ -×,Ñ,ús   –5µ>)ÚLinuxztest only works on Linuxc                 óD   — t        d«      }t        j                  |«       y )Nr�   )r   r*   rÏ  )r2   rf   s     r   Ú	test_libmzTestDylib.test_libmæ  s   € ô ˜CÓ ˆÜ×%Ñ% dÕ+r4   N)	rN   rO   rP   rÐ  r’   r“   r€   ÚsystemrÓ  rR   r4   r   rÍ  rÍ  à  s;   „ ò=ð €X×Ñ˜˜Ÿ™Ó*¨iÐ7Ø3ó5ñ,ó5ñ,r4   rÍ  c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestAnalysisc                 ó¨  — t        j                  «       }t        j                  t        j                  d«      t        j                  d«      t        j                  d«      g«      }t        j                  ||d«      }t        j
                  |j                  «       «      }|j                  \  }}|j                  ||«      }|j                  |«       |S )Nrê   rë   )
r	   r®   r­   rì   r¯   r±   r°   r²   r~   r#   )r2   r�   rï   rð   rñ   ri  ÚyÚzs           r   Úbuild_ir_modulezTestAnalysis.build_ir_moduleî  s�   € Ü�I‰I‹KˆÜ�_‰_œRŸZ™Z¨›^¬b¯j©j¸«n¼b¿j¹jÈ»nÐ-MÓNˆÜ�[‰[˜˜B Ó&ˆÜ�\‰\˜"×/Ñ/Ó1Ó2ˆØ�w‰w‰ˆˆ1Ø�F‰F�1�a‹LˆØ
�‰ˆqŒ	Øˆr4   c                 óê   — | j                  «       }|j                  d«      }t        j                  |«      }t        j                  |d¬«      }d}| j	                  ||«       | j                  ||«       y )Nrë   F©Ú	show_instz%.5 = add i32 %.1, %.2)rÚ  Ú
get_globalr*   Úget_function_cfgrå   ÚassertNotIn)r2   r@   rë   Údot_showing_instÚdot_without_instrá  s         r   Útest_get_function_cfg_on_irz(TestAnalysis.test_get_function_cfg_on_irø  sg   € Ø×"Ñ"Ó$ˆØ�n‰n˜UÓ#ˆÜ×0Ñ0°Ó5ÐÜ×0Ñ0°ÀÔFÐØ'ˆØ�‰�dÐ,Ô-Ø×Ñ˜Ð/Õ0r4   c                 ó‚  — | j                  «       j                  d«      }t        j                  |d¬«      }t        j                  |d¬«      }d}| j	                  ||«       | j	                  ||«       d}| j	                  ||«       | j	                  ||«       d}| j	                  ||«       | j                  ||«       y )Nrd  TrÜ  FÚdigraphzCFG for 'sum' functionz%.3 = add i32 %.1, %.2)rA   re  r*   rß  rå   rà  )r2   r®  rá  râ  ÚprefixÚfnamerá  s          r   Útest_function_cfg_on_llvm_valuez,TestAnalysis.test_function_cfg_on_llvm_value	  s©   € Ø—+‘+“-×,Ñ,¨UÓ3ˆÜ×0Ñ0°ÀDÔIÐÜ×0Ñ0°ÀEÔJÐàˆØ�‰�fÐ.Ô/Ø�‰�fÐ.Ô/à(ˆØ�‰�eÐ-Ô.Ø�‰�eÐ-Ô.à'ˆØ�‰�dÐ,Ô-Ø×Ñ˜Ð/Õ0r4   N)rN   rO   rP   rÚ  rã  rè  rR   r4   r   rÖ  rÖ  í  s   „ òò1ó1r4   rÖ  c                   ó"   — e Zd Zed„ «       Zd„ Zy)ÚTestTypeParsingc              #   ó|   K  — t        j                  «       }|–— t        |«      }t        j                  |«       y ­wr)   )r	   r®   r    r*   r=   )r2   r@   r>   s      r   Úcheck_parsingzTestTypeParsing.check_parsing	  s/   è ø€ ä�i‰i‹kˆð Š	ä�#‹hˆÜ×Ñ˜CÕ ùs   ‚:<c                 óR  — | j                  «       5 }t        j                  t        j                  d«      g«      }t        j                  ||d«      }t        j
                  |dg«      |_        d d d «       | j                  «       5 }t        j                  t        j                  d«      gd¬«      }t        j                  ||d«      }t        j
                  |dg«      |_        d d d «       | j                  «       5 }t        j
                  j                   t        j                  d«      d«       t        j                  d«      d«      gd¬«      }t        j                  ||j                  d«      }||_        d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   Œ­xY w# 1 sw Y   y xY w)Nrê   rë   r_   Tr^  r`   )	rì  r	   r`  rì   rf  rí   ÚinitializerÚliteral_structrì  )r2   r@   Útyprr  Úconsts        r   Útest_literal_structz#TestTypeParsing.test_literal_struct	  sN  € à×ÑÔ! SÜ×&Ñ&¬¯
©
°2«Ð'7Ó8ˆCÜ×"Ñ" 3¨¨UÓ3ˆBäŸ[™[¨¨q¨cÓ2ˆBŒN÷	 "ð ×ÑÔ! SÜ×&Ñ&¬¯
©
°2«Ð'7Ø.2ô4ˆCä×"Ñ" 3¨¨UÓ3ˆBäŸ[™[¨¨q¨cÓ2ˆBŒN÷ "ð ×ÑÔ! SÜ—K‘K×.Ñ.°´·
±
¸2³¸qÓ0AØ0>´·
±
¸2³¸qÓ0Að0Cà6:ð /ó <ˆEô ×"Ñ" 3¨¯
©
°EÓ:ˆBØ"ˆBŒN÷ "Ð!÷ "Ñ!ú÷ "Ð!ú÷ "Ð!ús&   ‘AFÂAFÃ=A>FÆFÆFÆF&N)rN   rO   rP   r   rì  rò  rR   r4   r   rê  rê  	  s   „ Øñ!ó ð!ó#r4   rê  c                   ób   — e Zd Z ej                   ej                  «       dk(  d«      d„ «       Zy)ÚTestGlobalConstructorsÚDarwinz&__cxa_atexit is broken on OSX in MCJITc                 ó~  — | j                  t        «      }| j                  |«      }|j                  «        |j	                  «        |j                  d«      }t        j                  t        j                  «      }t        j                  ||«      }| j                  |j                  j                  d«       |j                  d«      } t        j                  t        j                  «      |«      }| j                   |«       d«       |j                  «        | j                  |j                  j                  d«       y )NrH  r  rë   rI  r2  )rA   Úasm_global_ctorsrH   r½  Úrun_static_constructorsÚget_global_value_addressrO  ÚPOINTERr   Úcastr6   Úcontentsrv  r¾  r   Úrun_static_destructors)r2   r@   r¿  Úptr_addrÚptr_tr§  Úfoo_addrrë   s           r   rM  z.TestGlobalConstructors.test_global_ctors_dtors8	  së   € ð
 �k‰kÔ*Ó+ˆØ�X‰X�c‹]ˆØ
×ÑÔà
×"Ñ"Ô$ð ×.Ñ.¨sÓ3ˆÜ—‘œvŸ~™~Ó.ˆÜ�k‰k˜( EÓ*ˆØ×Ñ˜Ÿ™×+Ñ+¨RÔ0à×*Ñ*¨5Ó1ˆØ.Œf×ÑœvŸ~™~Ó.¨xÓ8ˆØ×Ñ™› Ô#à
×!Ñ!Ô#ð 	×Ñ˜Ÿ™×+Ñ+¨RÕ0r4   N)rN   rO   rP   r’   rG  r€   rÔ  rM  rR   r4   r   rô  rô  7	  s2   „ Ø€X‡_�_�_�X—_‘_Ó&¨(Ñ2Ø=ó?ñ1ó?ñ1r4   rô  c                   óV   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚTestGlobalVariablesc                 ó  — t        j                  «       }t        j                  d«      }t        j                  ||d«      }||_        t        |«      }|r| j                  d|«       n| j                  d|«       | j                  |«       y )Nrê   rë   Úundef)	r	   r®   rì   rf  r€  r    rå   rà  rA   )r2   r€  Ú	has_undefr@   rð  rr  r>   s          r   Úcheck_global_variable_linkagez1TestGlobalVariables.check_global_variable_linkageT	  sm   € ô �i‰i‹kˆÜ�j‰j˜‹nˆÜ×Ñ˜s C¨Ó/ˆØˆŒ
Ü�#‹hˆáØ�M‰M˜' 3Õ'à×Ñ˜W cÔ*à�‰�CÕr4   c                 ó&   — | j                  d«       y )Nr~  ©r  r1   s    r   Útest_internal_linkagez)TestGlobalVariables.test_internal_linkageh	  ó   € Ø×*Ñ*¨:Õ6r4   c                 ó&   — | j                  d«       y )NÚcommonr  r1   s    r   Útest_common_linkagez'TestGlobalVariables.test_common_linkagek	  s   € Ø×*Ñ*¨8Õ4r4   c                 ó*   — | j                  dd¬«       y )Nr  F©r  r  r1   s    r   Útest_external_linkagez)TestGlobalVariables.test_external_linkagen	  s   € Ø×*Ñ*¨:ÀÐ*ÕGr4   c                 ó&   — | j                  d«       y )NÚavailable_externallyr  r1   s    r   Ú!test_available_externally_linkagez5TestGlobalVariables.test_available_externally_linkageq	  s   € Ø×*Ñ*Ð+AÕBr4   c                 ó&   — | j                  d«       y )NÚprivater  r1   s    r   Útest_private_linkagez(TestGlobalVariables.test_private_linkaget	  s   € Ø×*Ñ*¨9Õ5r4   c                 ó&   — | j                  d«       y )NÚlinkoncer  r1   s    r   Útest_linkonce_linkagez)TestGlobalVariables.test_linkonce_linkagew	  r
  r4   c                 ó&   — | j                  d«       y )NÚweakr  r1   s    r   Útest_weak_linkagez%TestGlobalVariables.test_weak_linkagez	  s   € Ø×*Ñ*¨6Õ2r4   c                 ó&   — | j                  d«       y )NÚ	appendingr  r1   s    r   Útest_appending_linkagez*TestGlobalVariables.test_appending_linkage}	  s   € Ø×*Ñ*¨;Õ7r4   c                 ó*   — | j                  dd¬«       y )NÚextern_weakFr  r  r1   s    r   Útest_extern_weak_linkagez,TestGlobalVariables.test_extern_weak_linkage€	  s   € Ø×*Ñ*¨=ÀEÐ*ÕJr4   c                 ó&   — | j                  d«       y )NÚlinkonce_odrr  r1   s    r   Útest_linkonce_odr_linkagez-TestGlobalVariables.test_linkonce_odr_linkageƒ	  s   € Ø×*Ñ*¨>Õ:r4   c                 ó&   — | j                  d«       y )NÚweak_odrr  r1   s    r   Útest_weak_odr_linkagez)TestGlobalVariables.test_weak_odr_linkage†	  r
  r4   N)T)rN   rO   rP   r  r	  r  r  r  r  r  r  r  r"  r%  r(  rR   r4   r   r  r  S	  sA   „ óò(7ò5òHòCò6ò7ò3ò8òKò;ó7r4   r  Úx86zonly on x86c                   ó   — e Zd Zd„ Zy)ÚTestInlineAsmc                 óÂ   — t        j                  «        | j                  t        ¬«      }| j	                  d¬«      }|j                  |«      }| j                  d|«       y )N)r>   FrG   Únop)r*   Úinitialize_native_asmparserrA   rß  rM   rÏ   rå   )r2   r�   rÊ  r>   s       r   Útest_inlineasmzTestInlineAsm.test_inlineasmŒ	  sO   € Ü×(Ñ(Ô*Ø�K‰KœMˆKÓ*ˆØ× Ñ  UÐ Ó+ˆØ×Ñ˜qÓ!ˆØ�‰�e˜SÕ!r4   N)rN   rO   rP   r/  rR   r4   r   r+  r+  Š	  s   „ ó"r4   r+  c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚTestObjectFilea,  
        ;ModuleID = <string>
        target triple = "{triple}"

        declare i32 @sum(i32 %.1, i32 %.2)

        define i32 @sum_twice(i32 %.1, i32 %.2) {{
            %.3 = call i32 @sum(i32 %.1, i32 %.2)
            %.4 = call i32 @sum(i32 %.3, i32 %.3)
            ret i32 %.4
        }}
    c                 óÈ  — | j                  d¬«      }| j                  «       }|j                  |«      }t        j                  j                  |«      }d}d}|j                  «       D ]h  }|j                  «       sŒt        |j                  «       «      dkD  sŒ1|j                  «       €ŒB||j                  «       k  sŒVd}|j                  «       } n | j                  |«       y )NFrG   r  r   T)rM   rA   r  r*   ÚObjectFileRefÚ	from_dataÚsectionsÚis_textr|   ÚdataÚaddressr  )r2   rM   r@   rs  ÚobjÚhas_text_and_dataÚlast_addressrç   s           r   Útest_object_filezTestObjectFile.test_object_file£	  s¹   € Ø×,Ñ,°Ð,Ó7ˆØ�k‰k‹mˆØ ×,Ñ,¨SÓ1ˆÜ× Ñ ×*Ñ*¨7Ó3ˆà!ÐØˆØ—‘–ˆAà—	‘	•Ü˜Ÿ™›“M AÓ%Ø—I‘I“KÑ+Ø  1§9¡9£;Ó.à$(Ð!Ø Ÿy™y›{�Ùð  ð 	�‰Ð)Õ*r4   c                 ó¶  — | j                  d¬«      }| j                  «       }|j                  |«      }t        j                  j                  |«      }t        j                  | j                  | j                  «      |«      }|j                  |«        t        t        t        t        «      |j                  d«      «      }| j                   |dd«      d«       y )NFrG   Ú	sum_twicer`   ri  r  )rM   rA   r  r*   r3  r4  r  Úmod_asmrq  r   r   r¾  r6   )r2   rM   r@   rs  r9  rH   r>  s          r   rl  z#TestObjectFile.test_add_object_file·	  s³   € Ø×,Ñ,°Ð,Ó7ˆØ�k‰k‹mˆØ ×,Ñ,¨SÓ1ˆÜ× Ñ ×*Ñ*¨7Ó3ˆä×(Ñ(¨¯©°T·\±\Ó)BØ)7ó9ˆð 	×Ñ˜CÔ à2”Iœe¤U¬EÓ2Ø×$Ñ$ [Ó1ó3ˆ	ð 	×Ñ™ 1 a›¨"Õ-r4   c                 ó¬  — | j                  d¬«      }| j                  «       }|j                  |«      }t        «       \  }}	 	 t	        j
                  |d«      }|j                  |«       |j                  «        |j                  «        t        j                  | j                  | j                  «      |«      }|j                  |«       t	        j                  |«        t        t        t        t        «      |j!                  d«      «      }| j#                   |dd«      d«       y # j                  «        w xY w# t	        j                  |«       w xY w)NFrG   rn  r>  r`   ri  r  )rM   rA   r  r   rm   ro  rp  ÚflushrN  r*   r  r?  rq  rr  r   r   r¾  r6   )	r2   rM   r@   rs  rt  ru  r’  rH   r>  s	            r   rv  z3TestObjectFile.test_add_object_file_from_filesystemÇ	  s	  € Ø×,Ñ,°Ð,Ó7ˆØ�k‰k‹mˆØ ×,Ñ,¨SÓ1ˆÜ&›yÑˆ	�9ð	!ðÜ—I‘I˜i¨Ó.�Ø—‘˜Ô Ø—‘”	à—‘”	ä×,Ñ,¨T¯[©[¸¿¹Ó-FØ-;ó=ˆCð ×Ñ 	Ô*ä�I‰I�iÔ à2”Iœe¤U¬EÓ2Ø×$Ñ$ [Ó1ó3ˆ	ð 	×Ñ™ 1 a›¨"Õ-øð —‘•	ûô �I‰I�iÕ ús   Á7D' Á:AD< Ä'D9Ä9D< Ä<Ec                 óv  — t         j                  t        «      }t        j                  j                  |«      }|j                  «       D ]n  }|j                  «       sŒ| j                  t        |j                  «       «      d«       | j                  |j                  «       j                  «       t        «       Œp y )Né   )rý  ÚfromhexÚissue_632_elfr*   r3  r4  r5  r6  r6   r|   r7  ÚhexÚissue_632_text)r2   Úelfr9  rç   s       r   Útest_get_section_contentz'TestObjectFile.test_get_section_contentá	  sw   € ô �m‰mœMÓ*ˆÜ× Ñ ×*Ñ*¨3Ó/ˆØ—‘–ˆAØ�y‰y�{Ø× Ñ ¤ Q§V¡V£X£°Ô3Ø× Ñ  §¡£§¡£´Õ@ñ  r4   N)rN   rO   rP   r?  r<  rl  rv  rI  rR   r4   r   r1  r1  ”	  s   „ ð€Gò+ò(.ò .ó4Ar4   r1  c                   ó   — e Zd Zd„ Zy)ÚTestLLVMLockCallbacksc                 óÄ  ‡— g Šˆfd„}ˆfd„}t         j                  j                  ||«       | j                  ‰«       t        j                  «        | j                  d‰«       | j                  d‰«       t         j                  j                  ||«       | j                  t        «      5  t         j                  j                  ||«       d d d «       y # 1 sw Y   y xY w)Nc                  ó(   •— ‰ j                  d«       y )NÚacqrö  ©Úeventss   €r   rN  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.acqð	  ó   ø€ Ø�M‰M˜%Õ r4   c                  ó(   •— ‰ j                  d«       y )NÚrelrö  rO  s   €r   rS  z6TestLLVMLockCallbacks.test_lock_callbacks.<locals>.reló	  rQ  r4   rN  rS  )	r*   r   Úregister_lock_callbackrÖ  Úcreate_new_module_pass_managerrå   Úunregister_lock_callbackrâ   r“  )r2   rN  rS  rP  s      @r   Útest_lock_callbacksz)TestLLVMLockCallbacks.test_lock_callbacksí	  s¦   ø€ Øˆô	!ô	!ô 	�‰×'Ñ'¨¨SÔ1ð 	×Ñ˜Ô ä×+Ñ+Ô-à�‰�e˜VÔ$Ø�‰�e˜VÔ$ô 	�‰×)Ñ)¨#¨sÔ3ð ×ÑœzÕ*Ü�H‰H×-Ñ-¨c°3Ô7÷ +×*Ñ*ús   Â,!CÃCN)rN   rO   rP   rW  rR   r4   r   rK  rK  ì	  s   „ ó8r4   rK  c                   óN   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚTestPipelineTuningOptionsc                 ó*   — t        j                  «       S r)   )r*   Úcreate_pipeline_tuning_optionsr1   s    r   ÚptozTestPipelineTuningOptions.pto
  ó   € Ü×2Ñ2Ó4Ð4r4   c                 óD   — | j                  «       }|j                  «        y r)   )r\  rN  ©r2   r\  s     r   rR  z$TestPipelineTuningOptions.test_close
  s   € Ø�h‰h‹jˆØ�	‰	�r4   c                 óÊ   — | j                  «       }| j                  |j                  t        «       t	        d«      D ]%  }||_        | j                  |j                  |«       Œ' y r²  )r\  r  Úspeed_levelrð  r5  r6   ©r2   r\  r\  s      r   Útest_speed_levelz*TestPipelineTuningOptions.test_speed_level
  sJ   € Ø�h‰h‹jˆØ×Ñ˜cŸo™o¬sÔ3Ü�q–ˆAØˆCŒOØ×Ñ˜SŸ_™_¨aÕ0ñ r4   c                 óÊ   — | j                  «       }| j                  |j                  t        «       t	        d«      D ]%  }||_        | j                  |j                  |«       Œ' y ©Nri  )r\  r  Ú
size_levelrð  r5  r6   rb  s      r   Útest_size_levelz)TestPipelineTuningOptions.test_size_level
  sJ   € Ø�h‰h‹jˆØ×Ñ˜cŸn™n¬cÔ2Ü�q–ˆAØˆCŒNØ×Ñ˜SŸ^™^¨QÕ/ñ r4   c                 ó€   — | j                  «       }| j                  |j                  t        «       dD ]	  }||_        Œ y )N)é   éP   i^  )r\  r  Úinlining_thresholdrð  rb  s      r   Útest_inlining_thresholdz1TestPipelineTuningOptions.test_inlining_threshold 
  s5   € Ø�h‰h‹jˆØ×Ñ˜c×4Ñ4´cÔ:ÛˆAØ%&ˆCÕ"ñ r4   c                 ó¸   — | j                  «       }| j                  |j                  t        «       dD ]%  }||_        | j	                  |j                  |«       Œ' y ©N)TF)r\  r  Úloop_interleavingr  r6   ©r2   r\  r½   s      r   Útest_loop_interleavingz0TestPipelineTuningOptions.test_loop_interleaving&
  óK   € Ø�h‰h‹jˆØ×Ñ˜c×3Ñ3´TÔ:ÛˆAØ$%ˆCÔ!Ø×Ñ˜S×2Ñ2°AÕ6ñ r4   c                 ó¸   — | j                  «       }| j                  |j                  t        «       dD ]%  }||_        | j	                  |j                  |«       Œ' y rn  )r\  r  Úloop_vectorizationr  r6   rp  s      r   Útest_loop_vectorizationz1TestPipelineTuningOptions.test_loop_vectorization-
  sK   € Ø�h‰h‹jˆØ×Ñ˜c×4Ñ4´dÔ;ÛˆAØ%&ˆCÔ"Ø×Ñ˜S×3Ñ3°QÕ7ñ r4   c                 ó¸   — | j                  «       }| j                  |j                  t        «       dD ]%  }||_        | j	                  |j                  |«       Œ' y rn  )r\  r  Úslp_vectorizationr  r6   rp  s      r   Útest_slp_vectorizationz0TestPipelineTuningOptions.test_slp_vectorization4
  rr  r4   c                 ó¸   — | j                  «       }| j                  |j                  t        «       dD ]%  }||_        | j	                  |j                  |«       Œ' y rn  )r\  r  Úloop_unrollingr  r6   rp  s      r   Útest_loop_unrollingz-TestPipelineTuningOptions.test_loop_unrolling;
  sK   € Ø�h‰h‹jˆØ×Ñ˜c×0Ñ0´$Ô7ÛˆAØ!"ˆCÔØ×Ñ˜S×/Ñ/°Õ3ñ r4   c                 óè   — | j                  «       }| j                  t        «      5  d|_        d d d «       | j                  t        «      5  d|_        d d d «       y # 1 sw Y   Œ/xY w# 1 sw Y   y xY w)Nry  r  )r\  râ   r“  ra  r_  s     r   Útest_speed_level_constraintsz6TestPipelineTuningOptions.test_speed_level_constraintsB
  sT   € Ø�h‰h‹jˆØ×ÑœzÕ*ØˆCŒO÷ +à×ÑœzÕ*Ø ˆCŒO÷ +Ð*÷ +Ð*úç*Ð*ús   ¦AÁA(ÁA%Á(A1c                 óX  — | j                  «       }| j                  t        «      5  d|_        d d d «       | j                  t        «      5  d|_        d d d «       | j                  t        «      5  d|_        d|_        d d d «       y # 1 sw Y   Œ[xY w# 1 sw Y   ŒBxY w# 1 sw Y   y xY w)Nri  r  r`   )r\  râ   r“  rf  ra  r_  s     r   Útest_size_level_constraintsz5TestPipelineTuningOptions.test_size_level_constraintsI
  s|   € Ø�h‰h‹jˆØ×ÑœzÕ*ØˆCŒN÷ +à×ÑœzÕ*Ø ˆCŒO÷ +à×ÑœzÕ*ØˆCŒOØˆCŒN÷ +Ð*÷	 +Ð*úç*Ð*úç*Ð*ús#   ¦BÁBÁ0B ÂBÂBÂ B)N)rN   rO   rP   r\  rR  rc  rg  rl  rq  ru  rx  r{  r}  r  rR   r4   r   rY  rY  	
  s9   „ ò5òò1ò0ò'ò7ò8ò7ò4ò!ór4   rY  c                   ó   — e Zd Zdd„Zy)ÚNewPassManagerMixinc                 ó‚   — | j                  d¬«      }t        j                  ||«      }t        j                  ||«      }|S )NFrG   )rM   r*   r[  Úcreate_pass_builder)r2   ra  rf  rÊ  r\  Úpbs         r   r„  zNewPassManagerMixin.pbV
  s>   € Ø× Ñ  UÐ Ó+ˆÜ×1Ñ1°+¸zÓJˆÜ×%Ñ% b¨#Ó.ˆØˆ	r4   N)r   r   )rN   rO   rP   r„  rR   r4   r   r�  r�  T
  s   „ ôr4   r�  c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestPassBuilderc                 óD   — | j                  «       }|j                  «        y r)   )r„  rN  )r2   r„  s     r   rR  zTestPassBuilder.test_close_
  s   € Ø�W‰W‹YˆØ
�‰�
r4   c                 óæ   — | j                  d¬«      }t        j                  dd«      }d|_        d|_        d|_        d|_        d|_        t        j                  ||«      }|j                  «        y )NFrG   ri  r   r`   T)
rM   r*   r[  rk  ro  rt  rw  rz  rƒ  rN  )r2   rÊ  r\  r„  s       r   Útest_ptozTestPassBuilder.test_ptoc
  sj   € Ø× Ñ  UÐ Ó+ˆÜ×1Ñ1°!°QÓ7ˆØ!"ˆÔØ $ˆÔØ!%ˆÔØ $ˆÔØ"ˆÔÜ×%Ñ% b¨#Ó.ˆØ
�‰�
r4   c                 ó¤   — | j                  «       }|j                  «       }|j                  | j                  «       |«       |j	                  «        y r)   )r„  ÚgetModulePassManagerÚrunrA   rN  )r2   r„  Úmpms      r   Útest_get_module_pass_managerz,TestPassBuilder.test_get_module_pass_managern
  s8   € Ø�W‰W‹YˆØ×%Ñ%Ó'ˆØ�‰�—‘“˜rÔ"Ø
�‰�
r4   c                 óÂ   — | j                  «       }|j                  «       }|j                  | j                  «       j	                  d«      |«       |j                  «        y r@  )r„  ÚgetFunctionPassManagerrŒ  rA   re  rN  )r2   r„  Úfpms      r   Útest_get_function_pass_managerz.TestPassBuilder.test_get_function_pass_managert
  sC   € Ø�W‰W‹YˆØ×'Ñ'Ó)ˆØ�‰�—‘“×*Ñ*¨5Ó1°2Ô6Ø
�‰�
r4   c                 ó  ‡ — ˆ fd„} |d«      } |d«      }‰ j                  |t        «       ‰ j                  |t        «       ‰ j                  |j                  d«      d«       ‰ j                  |j                  d«      d«       y)z:Test pass timing reports for O3 and O0 optimization levelsc                 óò   •— ‰j                  «       }‰j                  | d¬«      }|j                  «        |j                  «       }|j	                  ||«       |j                  «       }|j                  «        |S ©Nr   ©ra  rf  )rA   r„  Ústart_pass_timingr‹  rŒ  Úfinish_pass_timingrN  )ra  r@   r„  r�  Úreportr2   s        €r   Úrun_with_timingz9TestPassBuilder.test_time_passes.<locals>.run_with_timing|
  sd   ø€ Ø—+‘+“-ˆCØ—‘ [¸Q�Ó?ˆBØ× Ñ Ô"Ø×)Ñ)Ó+ˆCØ�G‰G�C˜ÔØ×*Ñ*Ó,ˆFØ�H‰HŒJØˆMr4   ri  r   zPass execution timing reportr_   N)r  r    r6   Úcount)r2   rš  Ú	report_O3Ú	report_O0s   `   r   Útest_time_passesz TestPassBuilder.test_time_passesz
  sr   ø€ ô	ñ $ AÓ&ˆ	Ù# AÓ&ˆ	à×Ñ˜i¬Ô-Ø×Ñ˜i¬Ô-Ø×Ñ˜Ÿ™Ð)GÓHÈ!ÔLØ×Ñ˜Ÿ™Ð)GÓHÈ!ÕLr4   c                 ó
  — | j                  «       }| j                  «       }|j                  «       }|j                  ||«       |j	                  «        |j                  «       }|j                  «        | j                  |«       y r)   )rA   r„  r‹  rŒ  r—  r˜  rN  rÖ  )r2   r@   r„  r�  r™  s        r   Útest_empty_reportz!TestPassBuilder.test_empty_reportŽ
  se   € Ø�k‰k‹mˆØ�W‰W‹YˆØ×%Ñ%Ó'ˆØ�‰��RÔØ
×ÑÔØ×&Ñ&Ó(ˆØ
�‰Œ
Ø×Ñ˜Õ r4   c                 ó^  — | j                  «       }| j                  «       }|j                  «        |j                  «       }|j	                  ||«       |j                  «        | j                  t        d«      5  |j                  «        d d d «       |j                  «        y # 1 sw Y   ŒxY w)Nzonly be done once)	rA   r„  r—  r‹  rŒ  r˜  r,  rŸ   rN  ©r2   r@   r„  r�  s       r   Útest_multiple_timers_errorz*TestPassBuilder.test_multiple_timers_error˜
  s‚   € Ø�k‰k‹mˆØ�W‰W‹YˆØ
×ÑÔØ×%Ñ%Ó'ˆØ�‰��RÔØ
×ÑÔØ×#Ñ#¤LÐ2EÕFØ× Ñ Ô"÷ Gà
�‰�
÷ GÐFús   Á9B#Â#B,c                 ó  — | j                  «       }| j                  «       }|j                  «       }|j                  ||«       | j	                  t
        d«      5  |j                  «        d d d «       |j                  «        y # 1 sw Y   ŒxY w)Nznot enabled)rA   r„  r‹  rŒ  r,  rŸ   r˜  rN  r¢  s       r   Útest_empty_report_errorz'TestPassBuilder.test_empty_report_error£
  si   € Ø�k‰k‹mˆØ�W‰W‹YˆØ×%Ñ%Ó'ˆØ�‰��RÔØ×#Ñ#¤L°-Õ@Ø×!Ñ!Ô#÷ Aà
�‰�
÷ AÐ@ús   ÁBÂBN)rN   rO   rP   rR  r‰  rŽ  r’  rž  r   r£  r¥  rR   r4   r   r†  r†  ]
  s+   „ òò	òòòMò(!ò	ór4   r†  c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚTestNewModulePassManagerc                 ó*   — t        j                  «       S r)   )r*   rU  r1   s    r   ÚpmzTestNewModulePassManager.pm®
  r]  r4   c                 óÀ   — | j                  «       }t        |«      }| j                  |d¬«      }|j                  «       }|j	                  ||«       t        |«      }||fS r•  )rA   r    r„  r‹  rŒ  )r2   Úlevelr@   Úorig_asmr„  r�  Úoptimized_asms          r   Úrun_o_nz TestNewModulePassManager.run_o_n±
  sX   € Ø�k‰k‹mˆÜ�s“8ˆØ�W‰W °1ˆWÓ5ˆØ×%Ñ%Ó'ˆØ�‰��RÔÜ˜C›ˆØ˜Ð&Ð&r4   c                 óD   — | j                  «       }|j                  «        y r)   ©r©  rN  ©r2   r�  s     r   rR  z#TestNewModulePassManager.test_closeº
  ó   € Ø�g‰g‹iˆØ�	‰	�r4   c                 ót   — | j                  d«      \  }}| j                  d|«       | j                  d|«       y ©Nri  ú%.4©r®  rå   rà  ©r2   r¬  r­  s      r   Útest_run_o3z$TestNewModulePassManager.test_run_o3¾
  ó2   € Ø"&§,¡,¨q£/Ñˆ�-Ø�‰�e˜XÔ&Ø×Ñ˜ Õ.r4   c                 ót   — | j                  d«      \  }}| j                  d|«       | j                  d|«       y ©Nr   rµ  ©r®  rå   r·  s      r   Útest_run_o0z$TestNewModulePassManager.test_run_o0Ã
  ó0   € Ø"&§,¡,¨q£/Ñˆ�-Ø�‰�e˜XÔ&Ø�‰�e˜]Õ+r4   c                 ó&  — | j                  «       }| j                  «       }|j                  «        | j                  t        «      }t        |«      }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       y )Nú%.3)	r„  r©  Úadd_instruction_combine_passrA   Úasm_sum4r    rŒ  rå   rà  )r2   r„  r�  r@   r¬  r­  s         r   Útest_instcombinez)TestNewModulePassManager.test_instcombineÈ
  sp   € Ø�W‰W‹YˆØ�g‰g‹iˆØ×(Ñ(Ô*Ø�k‰kœ(Ó#ˆÜ�s“8ˆØ�‰��RÔÜ˜C›ˆØ�‰�e˜XÔ&Ø×Ñ˜ Õ.r4   c                 ó  — | j                  dd¬«      }t        t        j                  dd«      «      }t	        j
                  |«      }|j                  «       }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       t        t        «      }|j                  «       }t	        j
                  |«      }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       y )Nri  r   r–  úoptnone rÄ   Úalloca)
r„  r    Úasm_alloca_optnoneÚreplacer*   r=   r‹  rŒ  rå   rà  )r2   r„  r¬  r@   r�  r­  Úorig_asm_optnoneÚoptimized_asm_optnones           r   Útest_optnonez%TestNewModulePassManager.test_optnoneÓ
  sâ   € Ø�W‰W ¨qˆWÓ1ˆÜÔ)×1Ñ1°*¸bÓAÓBˆÜ×!Ñ! (Ó+ˆØ×%Ñ%Ó'ˆØ�‰��RÔÜ˜C›ˆØ�‰�h Ô)Ø×Ñ˜ =Ô1ô Ô1Ó2ÐØ×%Ñ%Ó'ˆÜ×!Ñ!Ð"2Ó3ˆØ�‰��RÔÜ # C£ÐØ�‰�hÐ 0Ô1Ø�‰�hÐ 5Õ6r4   c                 óÄ  — | j                  «       }|j                  «        |j                  «        |j                  «        |j	                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j!                  «        |j#                  «        |j%                  «        |j'                  «        |j)                  «        |j+                  «        |j-                  «        |j/                  «        |j1                  «        |j3                  «        |j5                  «        |j7                  «        |j9                  «        |j;                  «        |j=                  «        |j?                  «        |jA                  «        |j;                  «        |jC                  «        |jE                  «        |jG                  «        |jI                  «        |jK                  «        |jM                  «        |jO                  «        |jQ                  «        |jS                  «        |jU                  «        |jW                  «        |jY                  «        |j[                  «        |j]                  «        |j_                  «        |ja                  «        |jc                  «        |je                  «        |jg                  «        |ji                  «        |jk                  «        |jm                  «        |jo                  «        |jq                  «        |js                  «        |ju                  «        |jw                  «        |jy                  «        y r)   )=r©  Úadd_argument_promotion_passÚ'add_post_order_function_attributes_passÚadd_verifierÚadd_constant_merge_passÚadd_dead_arg_elimination_passÚadd_dot_call_graph_printer_passÚadd_always_inliner_passÚadd_rpo_function_attrs_passÚ#add_global_dead_code_eliminate_passÚadd_global_opt_passÚadd_ipsccp_passÚadd_internalize_passÚadd_loop_extract_passÚadd_merge_functions_passÚadd_partial_inliner_passÚadd_strip_symbols_passÚadd_strip_dead_debug_info_passÚadd_strip_dead_prototype_passÚadd_strip_debug_declare_passÚ add_strip_non_debug_symbols_passÚadd_aa_eval_passÚadd_simplify_cfg_passÚadd_loop_unroll_passrÁ  Úadd_jump_threading_passÚadd_cfg_printer_passÚadd_cfg_only_printer_passÚadd_dom_printer_passÚadd_dom_only_printer_passÚadd_post_dom_printer_passÚadd_post_dom_only_printer_passÚadd_dom_viewer_passÚadd_post_dom_viewer_passÚadd_post_dom_only_viewer_passÚadd_lint_passÚadd_aggressive_dce_passÚadd_break_critical_edges_passÚadd_dead_store_elimination_passÚadd_dead_code_elimination_passÚadd_aggressive_instcombine_passÚadd_lcssa_passÚadd_new_gvn_passÚadd_loop_simplify_passÚadd_loop_unroll_and_jam_passÚadd_sccp_passÚadd_lower_atomic_passÚadd_lower_invoke_passÚadd_lower_switch_passÚadd_mem_copy_opt_passÚ"add_unify_function_exit_nodes_passÚadd_reassociate_passÚadd_register_to_memory_passÚadd_sroa_passÚadd_sinking_passÚadd_tail_call_elimination_passÚadd_instruction_namer_passÚadd_loop_deletion_passÚadd_loop_strength_reduce_passÚadd_loop_rotate_passÚadd_refprune_passr±  s     r   Útest_add_passesz(TestNewModulePassManager.test_add_passesæ
  sé  € Ø�g‰g‹iˆØ×'Ñ'Ô)Ø×3Ñ3Ô5Ø×ÑÔØ×#Ñ#Ô%Ø×)Ñ)Ô+Ø×+Ñ+Ô-Ø×#Ñ#Ô%Ø×'Ñ'Ô)Ø×/Ñ/Ô1Ø×ÑÔ!Ø×ÑÔØ× Ñ Ô"Ø×!Ñ!Ô#Ø×$Ñ$Ô&Ø×$Ñ$Ô&Ø×"Ñ"Ô$Ø×*Ñ*Ô,Ø×)Ñ)Ô+Ø×(Ñ(Ô*Ø×,Ñ,Ô.Ø×ÑÔØ×!Ñ!Ô#Ø× Ñ Ô"Ø×(Ñ(Ô*Ø×#Ñ#Ô%Ø× Ñ Ô"Ø×%Ñ%Ô'Ø× Ñ Ô"Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×*Ñ*Ô,Ø×ÑÔ!Ø×%Ñ%Ô'Ø×$Ñ$Ô&Ø×)Ñ)Ô+Ø×ÑÔØ×#Ñ#Ô%Ø×)Ñ)Ô+Ø×+Ñ+Ô-Ø×*Ñ*Ô,Ø×+Ñ+Ô-Ø×ÑÔØ×ÑÔØ×"Ñ"Ô$Ø×(Ñ(Ô*Ø×ÑÔØ×!Ñ!Ô#Ø×!Ñ!Ô#Ø×!Ñ!Ô#Ø×!Ñ!Ô#Ø×.Ñ.Ô0Ø× Ñ Ô"Ø×'Ñ'Ô)Ø×ÑÔØ×ÑÔØ×*Ñ*Ô,Ø×&Ñ&Ô(Ø×"Ñ"Ô$Ø×)Ñ)Ô+Ø× Ñ Ô"Ø×ÑÕr4   N)rN   rO   rP   r©  r®  rR  r¸  r½  rÃ  rË  r  rR   r4   r   r§  r§  ­
  s*   „ ò5ò'òò/ò
,ò
	/ò7ó&> r4   r§  c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestNewFunctionPassManagerc                 ó*   — t        j                  «       S r)   )r*   Ú create_new_function_pass_managerr1   s    r   r©  zTestNewFunctionPassManager.pm(  s   € Ü×4Ñ4Ó6Ð6r4   c                 óD   — | j                  «       }|j                  «        y r)   r°  ©r2   r‘  s     r   rR  z%TestNewFunctionPassManager.test_close+  r²  r4   c                 óâ   — | j                  «       }|j                  d«      }t        |«      }| j                  |d¬«      }|j	                  «       }|j                  ||«       t        |«      }||fS )Nrd  r   r–  )rA   re  r    r„  r�  rŒ  )r2   r«  r@   Úfunr¬  r„  r‘  r­  s           r   r®  z"TestNewFunctionPassManager.run_o_n/  sh   € Ø�k‰k‹mˆØ×Ñ˜uÓ%ˆÜ�s“8ˆØ�W‰W °1ˆWÓ5ˆØ×'Ñ'Ó)ˆØ�‰��RÔÜ˜C›ˆØ˜Ð&Ð&r4   c                 ót   — | j                  d«      \  }}| j                  d|«       | j                  d|«       y r´  r¶  r·  s      r   r¸  z&TestNewFunctionPassManager.test_run_o39  r¹  r4   c                 ót   — | j                  d«      \  }}| j                  d|«       | j                  d|«       y r»  r¼  r·  s      r   r½  z&TestNewFunctionPassManager.test_run_o0>  r¾  r4   c                 óZ  — | j                  dd¬«      }t        t        j                  dd«      «      }t	        j
                  |«      j                  d«      }|j                  «       }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       t        t        «      }t	        j
                  |«      j                  d«      }|j                  «       }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       y )Nri  r   r–  rÅ  rÄ   rë   rÆ  )r„  r    rÇ  rÈ  r*   r=   re  r�  rŒ  rå   rà  )r2   r„  r¬  r  r‘  r­  rÉ  rÊ  s           r   rË  z'TestNewFunctionPassManager.test_optnoneC  sø   € Ø�W‰W ¨qˆWÓ1ˆÜÔ)×1Ñ1°*¸bÓAÓBˆÜ×!Ñ! (Ó+×8Ñ8¸Ó?ˆØ×'Ñ'Ó)ˆØ�‰��RÔÜ˜C›ˆØ�‰�h Ô)Ø×Ñ˜ =Ô1ô Ô1Ó2ÐÜ×!Ñ!Ð"2Ó3×@Ñ@ÀÓGˆØ×'Ñ'Ó)ˆØ�‰��RÔÜ # C£ÐØ�‰�hÐ 0Ô1Ø�‰�hÐ 5Õ6r4   c                 óD  — | j                  «       }| j                  «       }| j                  t        «      j	                  d«      }|j                  «        t        |«      }|j                  ||«       t        |«      }| j                  d|«       | j                  d|«       y )Nrd  rÀ  )
r„  r©  rA   rÂ  re  rÁ  r    rŒ  rå   rà  )r2   r„  r‘  r  r¬  r­  s         r   rÃ  z+TestNewFunctionPassManager.test_instcombineV  s{   € Ø�W‰W‹YˆØ�g‰g‹iˆØ�k‰kœ(Ó#×0Ñ0°Ó7ˆØ×(Ñ(Ô*Ü�s“8ˆØ�‰��RÔÜ˜C›ˆØ�‰�e˜XÔ&Ø×Ñ˜ Õ.r4   c                 óº   — | j                  d«      }|j                  «       }t        j                  t        «      j
                  D ]  }|j                  ||«       Œ y re  )r„  r�  r*   r=   Úasm_declarationr…  rŒ  )r2   r„  r‘  r  s       r   Útest_declarationsz,TestNewFunctionPassManager.test_declarationsb  sG   € Ø�W‰W�Q‹ZˆØ×'Ñ'Ó)ˆÜ×&Ñ&¤Ó7×AÔAˆCØ�G‰G�C˜Õñ Br4   c                 óD  — | j                  «       }|j                  «        |j                  «        |j                  «        |j	                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j                  «        |j!                  «        |j#                  «        |j%                  «        |j'                  «        |j)                  «        |j+                  «        |j-                  «        |j/                  «        |j1                  «        |j3                  «        |j5                  «        |j7                  «        |j9                  «        |j;                  «        |j=                  «        |j?                  «        |jA                  «        |jC                  «        |jE                  «        |jG                  «        |jI                  «        |jK                  «        |jM                  «        |jO                  «        |jQ                  «        y r)   ))r©  rá  râ  rã  rÁ  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  s     r   r  z*TestNewFunctionPassManager.test_add_passesh  sù  € Ø�g‰g‹iˆØ×ÑÔØ×!Ñ!Ô#Ø× Ñ Ô"Ø×(Ñ(Ô*Ø×#Ñ#Ô%Ø× Ñ Ô"Ø×%Ñ%Ô'Ø× Ñ Ô"Ø×%Ñ%Ô'Ø×%Ñ%Ô'Ø×*Ñ*Ô,Ø×ÑÔ!Ø×%Ñ%Ô'Ø×$Ñ$Ô&Ø×)Ñ)Ô+Ø×ÑÔØ×#Ñ#Ô%Ø×)Ñ)Ô+Ø×+Ñ+Ô-Ø×*Ñ*Ô,Ø×+Ñ+Ô-Ø×ÑÔØ×ÑÔØ×"Ñ"Ô$Ø×(Ñ(Ô*Ø×ÑÔØ×!Ñ!Ô#Ø×!Ñ!Ô#Ø×!Ñ!Ô#Ø×!Ñ!Ô#Ø×.Ñ.Ô0Ø× Ñ Ô"Ø×'Ñ'Ô)Ø×ÑÔØ×ÑÔØ×*Ñ*Ô,Ø×&Ñ&Ô(Ø×"Ñ"Ô$Ø×)Ñ)Ô+Ø× Ñ Ô"Ø×ÑÕr4   N)rN   rO   rP   r©  rR  r®  r¸  r½  rË  rÃ  r  r  rR   r4   r   r
  r
  '  s/   „ ò7òò'ò/ò
,ò
7ò&	/òó* r4   r
  rV   rW   c                   ó
  — e Zd Z eg d¢«       eg d¢«      dœd eg d¢«      i eg d¢«       eg d¢«      dœd	œZ eg d
¢«       eg d¢«      dœd eg d¢«      i eg d¢«       eg d¢«      dœd	œZd„ Zed„ «       Ze	d„ «       Z
y)Ú	TestBuild)	ÚpthreadrÙ  Údlr�   Úgcc_sr[  r(  ústdc++úld-linux-x86-64)r  rÙ  r  r�   r  r[  r(  r  )r’  Úaarch64Úamd64)Úadvapi32Úkernel32ÚntdllÚmsvcp140Úvcruntime140Úvcruntime140_1úapi-ms-win-crt-convert-l1-1-0ú!api-ms-win-crt-environment-l1-1-0úapi-ms-win-crt-heap-l1-1-0úapi-ms-win-crt-locale-l1-1-0úapi-ms-win-crt-math-l1-1-0úapi-ms-win-crt-runtime-l1-1-0úapi-ms-win-crt-stdio-l1-1-0úapi-ms-win-crt-string-l1-1-0úapi-ms-win-crt-time-l1-1-0úapi-ms-win-crt-utility-l1-1-0Úshell32Úole32)ÚllvmliterÔ  rÙ  Úcorefoundationúc++)r4  rÔ  rÙ  r6  )r’  Úarm64)rU   r¨  Údarwin)r  rÙ  Úzstdr  r�   r  r[  r  )r  rÙ  r9  r  r�   r  r[  zld-linux-aarch64)rÙ  r9  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  )r4  rÔ  rÙ  r9  r5  r6  )r4  rÔ  rÙ  r9  r6  c                 ó’  — t        j                  «       j                  «       }t        j                  «       j                  «       }|dk(  r| j                  |   |   }n&|dk(  r| j
                  |   |   }nt        d|› �«      ‚t        |d   «      }|D �ch c]  }|j                  d«      rdn|’Œ }}	 | j                  ||«       y c c}w # t        $ rq}dt        |«      › dt        |«      › dt        j                  ||«      › d	t        j                  ||«      › d
t        j                  ||«      › d�}	t        |	«      |‚d }~ww xY w)Nr   r   zUnexpected package type: Úcanonicalised_linked_librariesr%  z:Unexpected linkage encountered for libllvmlite:
Expected: z
     Got: z

Difference: z
Only in Expected: z
Only in Got: Ú
)r€   ÚmachineÚlowerrÔ  Úwheel_expectedÚconda_expectedr“  rw   r‚   r6   r6  r~  Úsymmetric_differenceÚ
difference)
r2   ÚinfoÚpackage_typer=  Úos_nameÚexpectedrA  rk   r¢   rQ  s
             r   Úcheck_linkagezTestBuild.check_linkage#  sf  € Ü×"Ñ"Ó$×*Ñ*Ó,ˆÜ—/‘/Ó#×)Ñ)Ó+ˆà˜7Ò"Ø×*Ñ*¨7Ñ3°GÑ<‰HØ˜WÒ$Ø×*Ñ*¨7Ñ3°GÑ<‰HäÐ8¸¸ÐGÓHÐHä�$Ð7Ñ8Ó9ˆñ ó
á�ð Ÿ>™>¨*Ô5‰Z¸3Ñ>Øð 	ð 
ð
		-Ø×Ñ˜X sÕ+ùò
øô ò 	-ð Ü & xÓ 0Ð1ð 2 Ü & s£˜}ð -"Ü"%×":Ñ":¸8ÀSÓ"IÐ!Jð K(Ü(+¯©°xÀÓ(EÐ'Fð G#Ü#&§>¡>°#°xÓ#@Ð"AÀðEˆCô ! Ó%¨1Ð,ûð	-ús   ÂCÂ4C Ã	EÃA,EÅEc                 ó¸   — t         j                  j                  «       }| j                  |d   d«       | j                  |d   d«       | j	                  |d«       y )NÚllvm_linkage_typeÚstaticÚllvm_assertions_stateÚonr   )r*   ÚconfigÚget_sysinfor6   rG  ©r2   rC  s     r   Útest_wheel_buildzTestBuild.test_wheel_build@  sP   € ä�{‰{×&Ñ&Ó(ˆØ×Ñ˜Ð1Ñ2°HÔ=Ø×Ñ˜Ð5Ñ6¸Ô=Ø×Ñ˜4 Õ)r4   c                 ó.  — t         j                  j                  «       }| j                  |d   d«       | j                  |d   d«       | j	                  |d«       t        j                  «       j                  «       dk(  r| j                  |d   d«       y y )NrI  rJ  rK  rL  r   rU   Úlibstdcxx_linkage_type)r*   rM  rN  r6   rG  r€   rÔ  r>  rO  s     r   Útest_conda_buildzTestBuild.test_conda_buildG  sƒ   € ä�{‰{×&Ñ&Ó(ˆØ×Ñ˜Ð1Ñ2°HÔ=Ø×Ñ˜Ð5Ñ6¸Ô=à×Ñ˜4 Ô)Ü�?‰?Ó×"Ñ"Ó$¨Ò/Ø×Ñ˜TÐ":Ñ;¸XÕFð 0r4   N)rN   rO   rP   rw   r?  r@  rG  Úis_wheel_packagerP  Úis_conda_packagerS  rR   r4   r   r  r  •  s  „ ñB +.ò /Có +Dñ -0ò 1<ó -=ñ "ð* #*©3ò 0:ó ,;ð "$ñ& ,/ò 08ó ,9ñ
 +.ò /7ó +8ñ	!#ñQ2€Nñh +.ò /Có +Dñ -0ò 1Fó -Gñ "ð, #*©3ò 0:ó ,;ð "$ñ* ,/ò 08ó ,9ñ +.ò /7ó +8ñ!#ñW7€Nòr-ð: ñ*ó ð*ð ñGó ñGr4   r  Ú__main__)lrO  ra  r   r   r   Úctypes.utilr   r-   r   rm   r€   ru   rp   r”   r’   Ú
contextlibr   Útempfiler   r4  r	   r
   r*   Úllvmlite.bindingr   Úllvmlite.testsr   r=  rÏ  r“   Úpackage_formatrU  rT  Ú
_HAVE_LIEFÚliefÚImportErrorÚ
needs_liefr   rQ   r¤  rï  rÂ  r—  rC  rP  r�   rÈ  rã   ra  r¬  r-  rû  r?  rß  Úasm_inlineasm2Úasm_inlineasm3Úlicm_asmr÷  rJ  rî   rþ  rÐ   rÕ   rÚ   rÑ  rÇ  r  rE  rG  Úasm_tli_exp2r  r}  r�  r'   rT   r—   rÞ   rI  Úobjectr»  r
  r  Úskipr  rx  r  r„  r»  rÈ  rÍ  rÖ  rê  rô  r  r‚   r+  r1  rK  rY  r�  r†  r§  r
  rn   r•   r  rN   ÚmainrR   r4   r   Ú<module>rh     sv  ðÛ Û ß ,Ñ ,Ý $Û 	Û Û 	Û Û 	Û Û 
Û Ý %Ý å Ý $Ý  Ý #ð €8×ÑÓ˜Ò!Ø!€D×!Ñ! /Ô2ð '�8×&Ñ& t×':Ñ':¸gÑ'EØ(HØ+/×+>Ñ+>Ð*?ð)AóCÐ ð '�8×&Ñ& t×':Ñ':¸gÑ'EØ(HØ+/×+>Ñ+>Ð*?ð)AóCÐ ð €
ð	ÛØ€Jð
 !ˆX× Ñ  Ð-IÓJ€
ò	-ð€ð&€ð
€ð€ð	€ð€ð
€ð "€8×!Ñ!Ó# vÒ-Ø#×+Ñ+¨OÐ=NÓO€Nð€ðÐ ð€ðÐ ðÐ ðÐ ð€ð€ð,B€ðH&€ðPÐ ð:€ð<	Ð ðÐ ò€ò Ð òÐ ð€ðÐ ð"€ð0-ð ð( Eð ð€ð €ð(+€ðZ1€ôh5ˆxô 5ôB/�xô /ôdF+�8ô F+ôRM'ˆxô M'ô`@>�Hô @>ôFv-�6ô v-ôr4˜ô 4ô4?�Ð,ô ?ð$ €‡�Ð/Ó0ô}!�8ó }!ó 1ð}!ô@o,�8ô o,ôd	s
�(ô s
ôlX.�ô X.ôvC�Xô Cô>	E˜ô 	Eô
,�ô 
,ô#1�8ô #1ôL!#�hô !#ôH1˜Yô 1ô847˜(ô 47ðn €×ÑÐ%�X×%Ñ%Ó'×2Ñ2°5Ó9¸=ÓIô"�Hó "ó Jð"ôUA�Xô UAôp8˜Hô 8ô:H ô HôV˜&ô ôM�hÐ 3ô Mô`w ˜xÐ)<ô w ôtk  Ð+>ô k ð\ €×Ñ�R—Z‘Z—^‘^Ð$8Ó9Ø1ó3àôwG�ó wGó ó3ðwGðt ˆzÒØ€H‡M�M…Oð øð[a ò 	Úð	ús   Ã L7 Ì7M Ì?M 