Swift compiler segmentation fault when building
SwiftSwift Problem Overview
Adding a (convenient) computed height
property to UIView
in my UIViewExtension.swift
file is causing the Swift compiler to segfault... What could possibly be going wrong here?
0 swift 0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001061e5af4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3 libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4 swift 0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5 swift 0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6 swift 0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7 swift 0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8 swift 0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9 swift 0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift 0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
11 swift 0x0000000105638033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
12 swift 0x00000001055aa65a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
13 swift 0x00000001055a935d main + 1533
14 libdyld.dylib 0x00007fff8a82e5fd start + 1
1. While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at <path redacted>/UIViewExtension.swift:60:5
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
If more information is needed to crack this, just comment. Thanks!
Edit:
Here's a related .xcodeproj that returns this question's compiler error. Download here
Swift Solutions
Solution 1 - Swift
I had this error because I was doing this :
if(currentMeal?.State == .Deleted){
}
instead of
if(currentMeal!.State == .Deleted){
}
so I think optional not unwrapped in if condition can cause this error
Solution 2 - Swift
When you run into a compiler segfault in Swift, you don't get a handy line number and error message. Here's how you can track the problem down:
- Create a new file called
SegFaultDebugger.swift
in your project. - In this new file, define an extension to the class that's giving you problems.
- Move a group of methods from the main file to
SegFaultDebugger.swift
. - Compile.
At this point, one of three things happens:
- You still get the segfault in the original file: Move the methods from
SegFaultDebugger.swift
back to the original file and move a different set of methods intoSegFaultDebugger.swift
. Repeat - You get a segfault in
SegFaultDebugger.swift
: Great! Now use binary search to pin the segfault down to a specific method until you can figure out what construct is causing it. - You get meaningful compiler errors: Great! Fix the errors. Once everything compiles, move your methods back into the original file.
Solution 3 - Swift
I got this error while extending one of my protocols and mistyped and optional type argument.
protocol SomeProtocolName: class {
var someProtocolVariable: String { get set }
func someProtocolFunction(someProtocolVariable: String)
}
// MARK:
extension SomeProtocolName {
func someProtocolFunction(someProtocolVariable: String?) {
self.someProtocolVariable = someProtocolVariable
}
}
The difference in function arguments String
in prototype and String?
in extension caused Segmentation Fault 11.
Solution 4 - Swift
I had this error too, and I fixed it like this:
Check your project and find out which files are used twice and remove one, or delete and re-add them all.
Errors in my Xcode:
>
Solution 5 - Swift
In Xcode 7, you can click on the error in the Debug Navigator and you'll be shown an expanded view of the crashes. Clicking on the hamburger button on the right expands the error, and if you scroll all the way down to the bottom of the expanded error message, you will see where it comes from.
For me, I had two of those segmentation fault errors. In the picture above, the first one is what it looks like when collapsed, the second is when you expand the hamburger button. At the very bottom of the expanded gray box, you'll see a message that says where the compiler crashed.
Note however that the error message may at times be not informative enough, so while it tells you where it crashed, it doesn't always say why and how to fix it. Getting rid of this error is still very much a matter of guesswork.
Solution 6 - Swift
I’ve discovered a simple workaround until the problem is fixed in a future Xcode/Swift build:
- Simply place all extensions causing the issue in the
.swift
file that it’s being used.
In the example project you provided, place the contents of UIViewExtension.swift
and CALayerExtension.swift
above AppDelegate.swift
Hopefully this can get us to write working Swift code until the problem’s cleared up.
Solution 7 - Swift
As for me, adding private
to static var fixed clang crash:
private static var taskId = 0
Solution 8 - Swift
I had a compiler segmentation fault on a statement like this:
someFunction(isFlagged ? "String1" : "String2")
I just did a if-else statement instead and it works.
Solution 9 - Swift
This typically happens when the compiler does not have enough information (despite what you think) to guarantee/determine the state of a statement or a variable within a statement.
For example, imagine you have a dictionary of type [String: String] which you populate with city names as keys and a comma separated list of corresponding zip codes/post codes.
Imagine that somewhere in your code you want to update the list of corresponding codes:
myDict[town] += newZipCode + ","
In this case, the compiler will respond with segmentation fault as town
might not be in the dictionary and therefore it cannot guarantee that the above statement will have a valid value.
To resolve this, you should store the current state of myDict[town]
in a separate variable allowing you to handle the case of key not in dict
and then update the value for the given key:
myDict[town] = guaranteedValue + "," newZipCode + ","
Unfortunately, it is not always straightforward to determine the root cause so I hope this simple example helps.
Solution 10 - Swift
You can also have this problem if you declare a condition with an unwrapped Bool as a property
Solution 11 - Swift
In my case, this error because I use Class name for variable
var MYClass : MYClass {
get {
return.....
}
}
And this fixes my problem
var myClass : MYClass {
get {
return.....
}
}
Solution 12 - Swift
In my case, a misplaced colon during string interpolation broke mine (XCode 6.1.1).
Example:
println("\(value1:value2)")
when I meant to do:
println("\(value1) : \(value2)")
Solution 13 - Swift
This error happened to me when I tried to override weak variable from parent class.
In base class:
weak var stripeViewDelegate : StripeViewDelegate? = nil
Derived class:
override weak var stripeViewDelegate : StripeViewDelegate? = nil {
didSet {
self.stripeView.delegate = stripeViewDelegate
}
The error disappeared when I removed =nil
from derived class.
Solution 14 - Swift
I catch some exception today
class func createByAny(instance: Any?) -> ApiCollectionResponse { ... }
and this solved it:
class func createByAny(instance: Any) -> ApiCollectionResponse { ... }
Because "Any" type is any type event "nil", "AnyObject", optional, ... :) It is cannot be optional, it is already optional.
typealias Any = protocol<>
Solution 15 - Swift
This error happens also if you accidentally declare a variable with a type matching its name:
var sectionGroup: sectionGroup? { ... }
Solution 16 - Swift
Ran into this error because of an extraneous generic type on an operator function, e.g.
func ==<T>(lhs: Foo, rhs: Foo) -> Bool {
return lhs.bar == rhs.bar
}
In my case, removing <T>
resolved the issue.
Solution 17 - Swift
In my case I had declared a struct
inside a func
. Moving the struct
to class level solved the issue.
Now that I write this I remember having had issues with struct
inside func
s before. It was something else than the segmentation fault (which seems to become notorious with the Swift 1.2 beta). OMG Apple, what are you doing there?
Solution 18 - Swift
Im my case, this happened when I did incorrect static initialization in a protocol. I found a way to get around, but a compiler should never produce a segmentation fault while building.
There are three files involved. A protocol NamedSegues.swift, a custom TableViewController that among other things implements the protocol which contains a callback, a custom TableViewCell that holds reference to this protocol to call the callback.
//file1
import Foundation
protocol NamedSegues {
func executeSegueWithId(id: String) -> Void
static func getDefault() -> NamedSegues // This was required because of init requirement in CustomCellView
}
//file2
class CustomController: UITableViewController, NamedSegues {
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellID", forIndexPath: indexPath ) as! CustomCellView
// Configure the cell...
//App logic...
cell.parent = self
}
//Mark: NamedSegues
func executeSegueWithId(id: String) ->() {
NSLog("Received callback to execute segue: \(id)")
//
}
static func getDefault() -> NamedSegues { // I think this must be where it threw up.
return self as! NamedSegues
}
}
//file3
import UIKit
class CustomCellView: UITableViewCell {
var id: String = "NoName"
var parent: NamedSegues = NamedSegues.getDefault() // This is where it was needed.
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
NSLog("Touched id: \(id)")
parent.executeSegueWithId(id) // This is where parent was used.
}
}
I got around it by using ?
In the protocol file, file1: delete the declaration of getDefault() In the CustomController file2: delete the implementation of getDefault. In the CustomCellView, file3:
var parent: NamedSegues?
...
parent?.executeSegueWithId(id)
The compiler should have caught this and given some error message instead of throwing a segmentation fault during build!
Solution 19 - Swift
Seems like the Swift 2 compiler might not have been quite ready for prime-time! In case this helps anyone, I was getting a segmentation fault: 11 due to a mismatch with the variable type in a closure header, specifically in a Parse method, PFQuery.query.findObjectsInBackgroundWithBlock
.
You can see the issue in more detail here: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/280
Solution 20 - Swift
Like @Fjohn said, this was an issue related to unwrapping an optional for me (broke in both Xcode 7.0 beta 6 and Xcode 7). In my case, I was not unwrapping optional of the optional (what tipped me off was double ?? in the descriptor. Using if let solved the issue
Solution 21 - Swift
As others wrote above, for me this happened when I'm using an extension over a protocol but the signature of methods in the protocol don't match the implementations in an extension.
In my case, I had added a new parameter to the implementation (in the extension) but forgot to also add it to the method's signature in the protocol.
Solution 22 - Swift
in my case, I tried to add a function parameter after a variadic parameter.
Reversing parameter sequence and making the variadic parameter the last parameter in the parameter list fixed it.
Solution 23 - Swift
Swift 3.0 (Xcode 8.1) exhibits this issue when a protocol declares an optional variable, and an implementer implements that variable as a lazy initialised one.
Bug is reported here: https://bugs.swift.org/browse/SR-1825
Solution 24 - Swift
Xcode 8.2.
Adding @nonobjc
protocol implementation into extension causing segmentation faults.
Move @nonobjc
protocol implementation into class implementation.
Solution 25 - Swift
In my case the culprit was accidentally overloading a function expecting an array argument with one with a variadic argument:
public required init(_ args: Node...) {
}
When the superclass had it defined as an array:
public required init(_ args: [Node]) {
}
Solution 26 - Swift
For me the following caused a segfault while type
is an optional:
switch type {
case .aType:
// Do Something
default:
break
}
and this solved it:
switch type {
case .Some(.aType):
// Do Something
default:
break
}
Solution 27 - Swift
I got this error with the following method signature in a custom UITableViewController.
func filterContentForSearchText(searchText: String)
changing to:
func filterContentForSearchText(searchText: String!)
fixed the problem.
Solution 28 - Swift
I had the same problem in an extension. My extension had two convenience initializers:
convenience init(context: NSManagedObjectContext) {
let entityDescription = NSEntityDescription.entityForName("PropertyEntity", inManagedObjectContext: context)!
self.init(entity: entityDescription, insertIntoManagedObjectContext: context)
}
convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
self.init(context: context)
property1 = (dictionary["key"] as? String) ?? ""
// More properties...
}
To get rid of the error I added an instance method map(dictionary: NSDictionary) and the segmentation fault error disappeared.
convenience init(dictionary: NSDictionary, context: NSManagedObjectContext) {
self.init(context: context)
map(dictionary)
}
Solution 29 - Swift
For me the issue was having my architectures not set to the standard. I had added i386 or something, just set it back to default xcodeproject arch and it compiled fine.
Solution 30 - Swift
I had the same problem in a swift project. The issue was a function that should have returned an object, but didn't have a return in it. This sort of error used to be signaled while editing with Obj-C. It seems like t isn't the case in Swift.
Solution 31 - Swift
It looks like it can be caused by a lot of reasons lol. In my case it was the pch file - when I tried to import the .pch file in bridging-header.h
I got the segmentation fault and I assume maybe it's caused by the PROJECT-swift.h
inside. So what I should do is putting everything swift needs into another const.h and #import "const.h"
in both .pch and bridgng-header.h
. This is a pretty dumb mistake I made but hope it can help some random guys come cross.
Solution 32 - Swift
Discovered yet another way to get this error while attempting to use an empty struct with Argo:
Causes Segmentation Fault 11:
struct Action {
// let foo: String
}
extension Action: Decodable {
static func decode(json: JSON) -> Decoded<Action> {
return .MissingKey("foo")
}
}
Compiles just fine:
struct Action {
let foo: String
}
extension Action: Decodable {
static func decode(json: JSON) -> Decoded<Action> {
return .MissingKey("foo")
}
}
Sigh.
Solution 33 - Swift
The problem for me was:
var startIndex : Int = etc...
Then I had:
startIndex++
Commenting out the startIndex++
prevented the error, so the fix was to use startIndex : Double
and casting its comparison and such to Double
Solution 34 - Swift
I'll throw the reason I was getting this crash in the ring since so many different issues seem to be causing variations of this compiler issue.
My "while emitting SIL" was referencing an 'observeValueForKeyPath' method and I couldn't for the life of me figure out what was wrong with it (it worked fine in swift 1.2). The issue, oddly, ended up being with parenthesis around my case statements.
This worked before Swift 2.0...
switch (context) {
case(&myContext):
print("observed")
}
This stopped the compiler error...
switch (context) {
case &myContext:
print("observed")
}
Hope this answer helps a couple of people save a little time.
Solution 35 - Swift
I also had same error, but it seemed to me that my Xcode has some issue while making build, after building several times the error was gone,but after I updated my Xcode to 7 the error was gone
Solution 36 - Swift
Mine was due to conflict in overriding without optional return...
Base class :
func functionName(bla:String) -> UIView?
Derived class :
func functionName(bla:String) -> UIView
It was failing on the call, not the func declaration.
functionName("Help")
Solution 37 - Swift
I ran across this today as well. In my case I implemented the protocol in a unit test file and forgot to implement one method that the default protocol implementation had left out.
Solution 38 - Swift
For me trying to assign a get property which I unwrapped lines.last!
was causing the issue. This code is invalid syntax, but the compiler would not pick up on it.
var lines : [Line] = [Line()]
var line : Line {
get {
return lines.last!
} set {
lines.last! = newValue
}
}
Solution 39 - Swift
I ran into this when I had a struct with 32 fields. I removed one field and everything was fine.
Solution 40 - Swift
mine solved by removing this function in archive mode:
debugPrint(someObject)
Solution 41 - Swift
I got the same error and wasted hours until I saw this blunder in my code:
let databaseRef: FIRDatabaseReference? = FIRDatabase.database().reference()
The problem was FIRDatabaseReference?
Changed it to
let databaseRef: FIRDatabaseReference = FIRDatabase.database().reference()
and it started working like a charm! Hope this answer helps!
Solution 42 - Swift
In my case, the issue was, that I've had "Math.h" custom file and class in project, importing and using it caused an issue.
The strangest thing, that this file was in project during last 18 days, but everything worked fine. I guess, that it depends on how I'm using it, using it in Objective-C project, doesn't cause any issue.
So it is better to double check classes names.
Solution 43 - Swift
got this error on Xcode 8 with Swift 3
I had to remove the throws keyword from this:
public extension FileManager {
public func foo() throws -> URLRelationship {
return URLRelationship.other
}
}
to this:
public extension FileManager {
public func foo() -> URLRelationship {
return URLRelationship.other
}
}
Solution 44 - Swift
In my case, I had to change from this:
listItem.sortingOrder -= 1
to this:
listItem.sortingOrder = listItem.sortingOrder - 1
I found it by looking at the problematic function (pointed by the build error message While emitting SIL for 'myBadFunction'
), and taking lines of code one by one until it worked, then focusing on the problematic line of code and trying different things. Good luck.
Solution 45 - Swift
Yet another crash issue:
Variations of the following caused Xcode 8.2b2 compiler crashes in three places in my code:
return self.initialValue.mutableCopy() as AnyObject!
self.initialValue is defined as:
fileprivate let initialValue:AnyObject!
I created various fixes for this, dependent on the context in my code. Here's one of the fixes:
let initialSetValue = self.initialValue as! NSMutableSet
let copy = NSMutableSet(set: initialSetValue);
return copy
Solution 46 - Swift
I solved it by removing the Build Settings configuration "Objective-C Bridging Header" string I've added manually.
Solution 47 - Swift
I am working with xcode 7.3. Till after noon it was fine. suddenly I started seeing Seg Fault 11 for Objective C style selector. I don't know know what changed as xcode flipped on me (Of course I didn't update anything). It was literally just next run and it start freaking out. But I am able to get my project compile after adding #selector in one particular file for which xcode was complaining about.
Weird part is that It's not complaining about other files. It targeted only one file.
My recommendation see what file xcode is complaining about then work on all the warnings that its throwing for swift 3. You might be able to pass this seg fault.
Still at this moment reasons unknown. As I am able to clone the same project else where and compile just fine.
Solution 48 - Swift
Apple should fix this in Xcode to give a better experience to us all.
I recommend you log a bug with apple here: https://bugreport.apple.com and reference bug: 32707221
so they see how many people its affecting.
For me it was unwrapping 2 objects out of order
eg:
if let passengers = car?.passengers,
let car = car {
}
instead of
if let car = car,
let passengers = car.passengers
{
}
hard to find!
Solution 49 - Swift
In my case the issue was in making extension with UITextFieldDelegate
protocol to my class:
extension LoginPresenter: UITextFieldDelegate {}
To solve a problem I moved it to a class definition:
class LoginPresenter<T: LoginInteractionProtocol>: BasePresenter<T>, LoginPresenterProtocol, UITextFieldDelegate {
}
Solution 50 - Swift
I was moving from Xcode 9 to 10.2. And here's a problem place
struct AbstractField<T>: ValidatableField {
var name: String
var value: Observable<Validated<T>>
var setValue: (Validated<T>) -> Void
var hint: Variable<String?>
var error: Variable<AviaFieldError?>
var isHidden: Binder<Bool>
var isBeingEdited: Observable<Bool>
var silentMode: Variable<Bool>
}
To solve a problem I replaced var to let for setValue closure.
struct AbstractField<T>: ValidatableField {
var name: String
var value: Observable<Validated<T>>
let setValue: (Validated<T>) -> Void
var hint: Variable<String?>
var error: Variable<AviaFieldError?>
var isHidden: Binder<Bool>
var isBeingEdited: Observable<Bool>
var silentMode: Variable<Bool>
}
Seems it was very hard to parse this construction for the compiler.
Solution 51 - Swift
Just got this error because I was using a feature of Swift 5.1 in a target that was not setup for Swift 5.1. Specifically, I was using Self.
to access a static function instead of ClassName.
which works in Swift 5.1 but trying to use it in an older target caused this same error.
Solution 52 - Swift
I have had this error because my class does not conform to Equatable
Solution 53 - Swift
Follow this process:
- Update pods of existing project
- Go to edit and select convert > current swift syntax
- In build setting enable bitcode to "NO"
- Add run the project
Solution 54 - Swift
Segmentation faults can happen because of many reasons including compiler issues. I noticed in most cases using of protocols are involved and causes confusion in the compiler or sometimes module optimization process during compiler will lead to such an error.
I contacted Apple for one of these cases and they gave me a hidden attribute @_optimize(none)
that you can add it to the initializer of your class to tell the compiler ignore the class from module optimization. I suggest give it a try if other methods suggested on the thread did not work for you.
@_optimize(none)
override init() {
super.init()
}