Getting Thread 10: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) after adding property to my struct

Viewed 109

I have a ProfileRegistration struct which is just a basic model. I haven't had any problems with it. However as soon as I add a new property to the model the app crashes at runtime as soon as it is accessed anywhere in code.

// Causes app to crash
struct ProfileRegistration: Codable {
    let resourceNumber: String?
    let nickName: String?
    let firstName: String?
    let initials: String?
    let name: String?
    let lastName: String?
    let gender: Gender?
    let birthdate: String?
    let nationality: String?
    let phoneNumber: String?
    let email: String?
    
    let insuranceNumber: String?
    let employmentDate: String?
    let username: String?
    
    var worksteadLocations: [WorksteadLocation] = []
    var coworkerInformations: [CoworkerInformation] = []
    
    var worksteadLocation: WorksteadLocation? {
        worksteadLocations.first
    }
    
    var jobCoachFirstName: String? {
        coworkerInformations.first?.firstName
    }
}
// Doesn't cause app to crash
struct ProfileRegistration: Codable {
    let resourceNumber: String?
    let nickName: String? 
    let firstName: String?
    let initials: String?
    // let name: String?
    let lastName: String?
    let gender: Gender?
    let birthdate: String?
    let nationality: String?
    let phoneNumber: String?
    let email: String?
    
    let insuranceNumber: String?
    let employmentDate: String?
    let username: String?
    
    var worksteadLocations: [WorksteadLocation] = []
    var coworkerInformations: [CoworkerInformation] = []
    
    var worksteadLocation: WorksteadLocation? {
        worksteadLocations.first
    }
    
    var jobCoachFirstName: String? {
        coworkerInformations.first?.firstName
    }
}

I get the error:

Thread 10: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

Right above the error in the stack I see this

async function pointer to reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error)

Complete stack:

Workstead`partial apply for thunk for @escaping @callee_guaranteed @Sendable @async () -> (@owned ProfileRegistration, @error @owned Error):
    0x102cc10f0 <+0>:   orq    0x9d5409(%rip), %rbp      ; (void *)0x1000000000000000
    0x102cc10f7 <+7>:   pushq  %rbp
    0x102cc10f8 <+8>:   pushq  %r14
    0x102cc10fa <+10>:  leaq   0x8(%rsp), %rbp
    0x102cc10ff <+15>:  subq   $0x38, %rsp
    0x102cc1103 <+19>:  movq   %r14, -0x10(%rbp)
    0x102cc1107 <+23>:  movq   %rdi, -0x28(%rbp)
    0x102cc110b <+27>:  xorl   %eax, %eax
    0x102cc110d <+29>:  movl   %eax, %edi
    0x102cc110f <+31>:  callq  0x102ccf350               ; ___lldb_unnamed_symbol350$$Workstead
    0x102cc1114 <+36>:  movq   %r14, 0x18(%r14)
    0x102cc1118 <+40>:  movq   0x10(%r13), %rax
    0x102cc111c <+44>:  movq   %rax, -0x20(%rbp)
    0x102cc1120 <+48>:  movq   0x18(%r13), %rax
    0x102cc1124 <+52>:  movq   %rax, -0x18(%rbp)
    0x102cc1128 <+56>:  movl   0xa52fd6(%rip), %eax      ; async function pointer to reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) + 4
    0x102cc112e <+62>:  movl   %eax, %edi
    0x102cc1130 <+64>:  callq  0x10354a1de               ; symbol stub for: swift_task_alloc
->  0x102cc1135 <+69>:  movq   -0x28(%rbp), %rdi
    0x102cc1139 <+73>:  movq   -0x20(%rbp), %rsi
    0x102cc113d <+77>:  movq   -0x18(%rbp), %rdx
    0x102cc1141 <+81>:  movq   %rax, %r14
    0x102cc1144 <+84>:  movq   -0x10(%rbp), %rax
    0x102cc1148 <+88>:  movq   %r14, 0x20(%rax)
    0x102cc114c <+92>:  movq   0x18(%rax), %rax
    0x102cc1150 <+96>:  movq   %rax, (%r14)
    0x102cc1153 <+99>:  leaq   0x26(%rip), %rax          ; (1) await resume partial function for partial apply forwarder for reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) at <compiler-generated>
    0x102cc115a <+106>: movq   %rax, 0x8(%r14)
    0x102cc115e <+110>: addq   $0x30, %rsp
    0x102cc1162 <+114>: addq   $0x10, %rsp
    0x102cc1166 <+118>: popq   %rbp
    0x102cc1167 <+119>: btrq   $0x3c, %rbp
    0x102cc116c <+124>: jmp    0x102cc0f60               ; reabstraction thunk helper from @escaping @callee_guaranteed @Sendable @async () -> (@owned Workstead.ProfileRegistration, @error @owned Swift.Error) to @escaping @callee_guaranteed @async () -> (@out Workstead.ProfileRegistration, @error @owned Swift.Error) at <compiler-generated>

It doesn't seem to matter what property I add to the struct, it always crashes when I add one. It doesn't crash when I remove a property.

I am using Xcode Version 13.3.1 (13E500a) and running on iOS 15.4, tested on multiple devices

Xcode error screenshot

1 Answers

I have exactly the same error. If I add one more field to codable struct it crashes. In my case I have two concurrent network requests:

async let req1 = await someManager.fetch()
async let req2 = await someManager.get(id: uid)

let (result1, result2) = await (req1, req2)

I split it to sync network requests:

let result1 = await someManager.fetch()
let result2 = await someManager.get(id: uid)

And it started to working.

I believe there is some issue on iOS side. I use Xcode 13.4.

Related