| // RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -emit-ir | %FileCheck %s |
| |
| sil_stage canonical |
| |
| import Builtin |
| import Swift |
| |
| var g: Int |
| |
| public func inoutAccess() |
| |
| sil_global hidden @$s20tsan_instrumentation1gSiv : $Int |
| |
| // CHECK: @"$s20tsan_instrumentation1gSiv" = hidden global [[GLOBAL:%.*]] zeroinitializer, align {{.*}} |
| |
| // The inout access builtin is currently turned into a call to the __tsan_write1 |
| // compiler-rt instrumentation. Eventually we will add a specific |
| // instrumentation callback for tsan inout accesses to compiler-rt. |
| |
| // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @"$s20tsan_instrumentation11inoutAccessyyF"() |
| // foo() -> () |
| sil @$s20tsan_instrumentation11inoutAccessyyF : $@convention(thin) () -> () { |
| bb0: |
| %0 = global_addr @$s20tsan_instrumentation1gSiv : $*Int |
| %1 = builtin "tsanInoutAccess"(%0 : $*Int) : $() |
| // CHECK: call void @__tsan_external_write(i8* bitcast ([[GLOBAL]]* @"$s20tsan_instrumentation1gSiv" to i8*), i8* null, i8* inttoptr ({{(i32|i64)}} 1 to i8*)) |
| |
| %2 = tuple () |
| return %2 : $() |
| // CHECK: ret void |
| } |