整理下能把Swift编译器和Xcode弄崩溃的代码

最近在学Swift,然后使用的过程中发现这个编译器还是不够成熟,经常有一些代码能把Xcode的Playground甚至是Swift编译器给弄崩溃。我这边环境是Xcode 6 beta 2

代码1

func read(inout i : Int32 ) -> LogicValue{    return true;}var i : Int32while read(&i) {print(i)}

在Swift的Repl里执行这个直接Segmentation Fault: 11了。

代码2

     func test() -> Int     {             var b = 11             struct TTT             {                         var i = b             }             var i = TTT()             return i.i;  }

代码分析按照Swift的Grammar规定,函数内部是由多个statement组成的,而statement里可以包括类型定义,这里在类型TTT里引用了test里的一个局部变量,而编译器会将i初始化用的b当作全局变量来查找,编译器检查符号引用的pass发现是没问题的,因为这是在上一层scope里定义的,但是代码生成的时候就出问题了,因为代码生成的时候类型只能引用上层的全局变量,而不能引用局部变量,编译器报错:

Global is external, but doesn't have external or weak linkage!i8* ()* @_TFF11lldb_expr_04testFT_SiaL_1bSiinvalid linkage type for function declarationi8* ()* @_TFF11lldb_expr_04testFT_SiaL_1bSiLLVM ERROR: Broken module found, compilation aborted!Assertion failed: (err == 0), function ~Mutex, file /SourceCache/lldb_KLONDIKE/lldb_KLONDIKE-320.3.100/source/Host/common/Mutex.cpp, line 246.Abort trap: 6

代码3

struct T{};var T = 3;

这个错误可出在定义一个同一作用域内与自定义类型同名的变量上,对于typealias定义的别名则不出错。编译器出错信息:

lldb(50259,0x1103d3000) malloc: *** error for object 0x7ff9bcd14f32: pointer being freed was not allocated*** set a breakpoint in malloc_error_break to debugAbort trap: 6

代码4

Int.self.dynamicType

对于别的类型,使用.self.dynamicType都会出同样的错误编译器出错信息:

Segmentation fault: 11
整理下能把Swift编译器和Xcode弄崩溃的代码

相关文章:

你感兴趣的文章:

标签云: