2015-02-13 3 views
2

При попытке получить SwiftAddressBook установить с CocoaPods, компилирование дает мне следующую ошибку:LLVM Ошибка: Тип вызова параметров не соответствует сигнатуре функции

Call parameter type does not match function signature! %V16SwiftAddressBook15MultivalueEntry.87* %0 %V16SwiftAddressBook15MultivalueEntry.85* tail call void @_TFFC16SwiftAddressBook22SwiftAddressBookPersonP33_ECEF355CFD253D8039C191CB27BDAECD24convertMultivalueEntriesFS0_U_Ss9AnyObject__FTGSqGSaGVS_15MultivalueEntryQ____9converterFQ_Q0__GSqGSaGS2_Q0____U_FGS2_Q__GS2_Q0__(%V16SwiftAddressBook15MultivalueEntry.87* noalias sret %0, %V16SwiftAddressBook15MultivalueEntry.86* noalias %3, i8* %.fn.load, %swift.refcounted* %6, %swift.type* %8, %swift.type* %10), !dbg !8665 LLVM ERROR: Broken function found, compilation aborted!

Это, кажется, жалуются на следующий 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?

ответ

0

я смог успокоить компилятор LLVM, удалив использование map() и явно вводить обратный массив:

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 
} 
+0

Ну, эта версия вылетает во время выполнения. – TAKeanice

+0

Я был неправ, он не разбился. Однако это всего лишь обходной путь и не раскрывает истинной причины проблемы: ошибка в оптимизации компилятора! – TAKeanice

0

Действительно, подмигнул об уровне оптимизации. Без оптимизации Swift бесполезен, но с отключенной оптимизацией эта проблема просто исчезает. В компиляторе явно есть ошибка!

Смежные вопросы