Problems caused by "is<ErrorType>"


(Jacob Bandes-Storch) #1

Investigating compiler_crashers/26960-void.swift, I found that
TypeBase::getMemberSubstitutions is being called on a NominalType
(StructType) whose Parent is an ErrorType (getString() returns "<<error

.B").

In this case, is<ErrorType>() returns false, because the type is not itself
an ErrorType, only its parent is.

Immediately collapsing any NominalType whose parent is ErrorType seems like
it would lose information that might be useful for diagnostics. However,
simply checking is<ErrorType>() is clearly insufficient.

Should there be something like "isErrorType()" which checks recursively
whether any members (including Parent) are ErrorType?

Jacob Bandes-Storch


(Slava Pestov) #2

Hi Jacob,

Maybe it would be better to figure out why getMemberSubstitutions() is being called on the invalid type, and try to catch the problem further up?

Otherwise, Doug Gregor might have further suggestions.

Slava

ยทยทยท

On Dec 5, 2015, at 11:41 PM, Jacob Bandes-Storch via swift-dev <swift-dev@swift.org> wrote:

Investigating compiler_crashers/26960-void.swift, I found that TypeBase::getMemberSubstitutions is being called on a NominalType (StructType) whose Parent is an ErrorType (getString() returns "<<error type>>.B").

In this case, is<ErrorType>() returns false, because the type is not itself an ErrorType, only its parent is.

Immediately collapsing any NominalType whose parent is ErrorType seems like it would lose information that might be useful for diagnostics. However, simply checking is<ErrorType>() is clearly insufficient.

Should there be something like "isErrorType()" which checks recursively whether any members (including Parent) are ErrorType?

Jacob Bandes-Storch
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev