Declaración de variable corta y error de "variable declarada y no utilizada"

Me encontré con un problema extraño en el que el siguiente código no se compila:

func main() {
    var val reflect.Value
    var tm time.Time

    if tm, err := time.Parse(time.RFC3339, "2018-09-11T17:50:54.247Z"); err != nil {
        panic(err)
    }
    val = reflect.ValueOf(tm)

    fmt.Println(val, tm, reflect.TypeOf(tm))
}

con el error (el código es lo que recomienda linter).:

$ go run main.go
# command-line-arguments
./main.go:13:5: tm declared and not used

Nota latm variable de hecho se utiliza.

Sin embargo, si agrego un bloque else, todo se compila como se esperaba:

func main() {
    var val reflect.Value
    var tm time.Time

    if tm, err := time.Parse(time.RFC3339, "2018-09-11T17:50:54.247Z"); err != nil {
        panic(err)
    } else {
        val = reflect.ValueOf(tm)
    }

    fmt.Println(val, tm, reflect.TypeOf(tm))
}

¿Esto parece un error en el compilador o quizás un problema conocido? ¿Alguna idea? (Estoy usando go 1.11)

edit: a todos los encuestados hasta ahora. Según:https: //golang.org/ref/spec#Short_variable_declaration

A diferencia de las declaraciones de variables regulares, una declaración de variable corta puede volver a declarar variables siempre que se declararon originalmente anteriormente en el mismo bloque (o el parámetro enumera si el bloque es el cuerpo de la función) con el mismo tipo y al menos uno de los que no están en blanco Las variables son nuevas. Como consecuencia, la redeclaración solo puede aparecer en una declaración corta de múltiples variables. La redeclaración no introduce una nueva variable; solo asigna un nuevo valor al original.

Respuestas a la pregunta(2)

Su respuesta a la pregunta