【问题标题】:LLVM Error: Call parameter type does not match function signatureLLVM 错误:调用参数类型与函数签名不匹配
【发布时间】:2015-02-13 01:13:44
【问题描述】:

在尝试使用 CocoaPods 设置 SwiftAddressBook 时,编译时出现以下错误:

调用参数类型与函数签名不匹配! %V16SwiftAddressBook15MultivalueEntry.87* %0 %V16SwiftAddressBook15MultivalueEntry.85* 尾调用无效 @_TFFC16SwiftAddressBook22SwiftAddressBookPersonP33_ECEF355CFD253D8039C191CB27BDAECD24convertMultivalueEntriesFS0_U_Ss9AnyObject__FTGSqGSaGVS_15MultivalueEntryQ____9converterFQ_Q0__GSqGSaGS2_Q0____U_FGS2_Q__GS2_Q05MultivalueBook(%V187EntressAddress noalias sret %0, %V16SwiftAddressBook15MultivalueEntry.86* noalias %3, i8* %.fn.load, %swift.refcounted* %6, %swift.type* %8, %swift.type* %10), !dbg !8665 LLVM 错误:发现损坏的函数,正在编译 中止了!

它似乎在抱怨以下method

private func convertMultivalueEntries<T,U : AnyObject>(multivalue : Array<MultivalueEntry<T>>?, converter : (T) -> U) -> Array<MultivalueEntry<U>>? {
    return multivalue?.map { m -> MultivalueEntry<U> in
        return MultivalueEntry(value: converter(m.value), label: m.label, id: m.id)
    }
}

如果我放弃 CocoaPods 安装,而只是将源代码复制到我的主项目中,它编译得很好。

有没有一种方法可以简化此方法调用,以免 LLVM 编译器阻塞它?还是我的 CocoaPod 设置不正确?

【问题讨论】:

    标签: ios swift cocoapods


    【解决方案1】:

    我能够通过删除 map() 的使用并显式键入返回数组来安抚 LLVM 编译器:

    private func convertMultivalueEntries<T,U: AnyObject>(multivalue : [MultivalueEntry<T>]?, converter : (T) -> U) -> [MultivalueEntry<U>]? {
    
        var result: [MultivalueEntry<U>]?
        if let multivalue = multivalue {
            result = []
            for m in multivalue {
                var convertedValue = converter(m.value)
                var converted = MultivalueEntry(value: convertedValue, label: m.label, id: m.id)
                result?.append(converted)
            }
        }
        return result
    }
    

    【讨论】:

    • 好吧,那个版本在运行时崩溃了。
    • 我错了,它不会崩溃。但是,这只是一种解决方法,并没有揭示问题的真正原因:编译器优化中的错误!
    【解决方案2】:

    确实,这与优化级别有关。没有优化,Swift 毫无用处,但关闭优化后,这个问题就消失了。编译器中显然存在错误!

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多