Panics don't usually happen nowadays, instead the compiler package
returns errors while compiling. If it still panics, this is usually from
within LLVM from where deferred functions are not run.
Этот коммит содержится в:
Ayke van Laethem 2018-10-31 10:10:49 +01:00
родитель 8a211d36aa
коммит 4e4f91bea7
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED

24
main.go
Просмотреть файл

@ -46,22 +46,20 @@ func Compile(pkgName, outpath string, spec *TargetSpec, config *BuildConfig, act
}
// Compile Go code to IR.
parseErr := func() error {
if config.printIR {
// Run this even if c.Compile() panics.
defer func() {
fmt.Println("Generated LLVM IR:")
fmt.Println(c.IR())
}()
}
return c.Compile(pkgName)
}()
if parseErr != nil {
return parseErr
err = c.Compile(pkgName)
if err != nil {
return err
}
if err := c.Verify(); err != nil {
return err
}
if config.printIR {
fmt.Println("Generated LLVM IR:")
fmt.Println(c.IR())
}
c.ApplyFunctionSections() // -ffunction-sections
if err := c.Verify(); err != nil {
return err
}