[swift-users] Swift 3 segmentation error 11

Ben Cohen ben_cohen at apple.com
Sat Mar 11 18:23:21 CST 2017


Hi – I think you’re hitting a bug that was fixed recently. There was a missing default for this particular combination’s slice type, which then interacted quite unpleasantly with a compiler bug to cause a crash. Can you try it with the latest Xcode beta?

In the mean-time, adding the following to your declaration of your DynamicList ought to do as a workaround:

    typealias SubSequence =  MutableRangeReplaceableBidirectionalSlice<DynamicList>


> On Mar 10, 2017, at 3:32 PM, Don Giovanni via swift-users <swift-users at swift.org> wrote:
> 
> The following code generates a segmentation error:
> 
> 
>      extension Int
>        {
>        	static prefix func++(i:Int)->Int{
>        		
>        		return i+1;
>        	}
>        	
>        	static prefix func--(i:Int)->Int{
>        		return i-1;
>        	}
>        }
> 
> 
>        infix operator <-;
> 
>        class DynamicList<T>: RangeReplaceableCollection, MutableCollection, BidirectionalCollection
>        {
>        	
>        	var length:Int;
>        	var arr:Array<T>?;
>        	var startIndex:Int{
>        		return 0;
>        	}
>        	var endIndex:Int{
>        	
>        		return length;
>        	}
>        	
>        	subscript(i:Int)->T{
>        		get{
>        			return arr![i];
>        		}
>        		set{
>        			arr![i] = newValue;
>        		}
>        	}
>        	
>        	func index(after i: Int) -> Int{
>        		return ++i;
>        	}
>        	
>        	func index(before i: Int) -> Int{
>        		return --i;
>        	}
>        	
>        	required init(){
>        		length = 0;
>        		
>        	
>        		
>        	}
>        	
> 
>        	
>        	static func <- (left: inout DynamicList<T>, right: DynamicList<T>){
>        		
>        	}
>        	
>        	
>        	/* func replaceSubrange<C>(_ subrange: Range<Self.Index>, with newElements: C) where C : Collection,
>        		C.Iterator.Element == Iterator.Element  */
>        	
>        	
>        	
>        	func replaceSubrange<C>(_ subrange: Range<DynamicList.Index>, with c: C)
>        	where C : Collection, C.Iterator.Element == DynamicList.Iterator.Element{
>        		
>        					
>        					
>        										
>        					
>        					
>        		
>        		
>        	}
>        	
>        	
>        }
> 
> My intent here is to have the generic class `DynamicList<T>`
> 
> adopt three protocols: 
> 
> `class DynamicList<T>: RangeReplaceableCollection, MutableCollection, BidirectionalCollection` 
> 
> as indicated in the code above but it generates segmentation error. 
> 
> However, when I replace `MutableCollection` with `Collection`, code above complies. 
> 
> If I remove `BidirectionalCollection`, the code above compiles with no segmentation error. 
> 
> Is it not possible to adopt all 3: 
> 
> - RangeReplaceableCollection 
> - MutableCollection 
> - BidirectionalCollection 
> 
> at the same time? Thanks.
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20170311/02f8e8d0/attachment.html>


More information about the swift-users mailing list