When should a RecordDecl be invalid?


I’ve been looking at PR18284, where we have two RecordDecls, one the subclass of the other, and we go and mark the superclass RecordDecl as invalid, while keeping the subclass valid. This ends up confusing the code that computes the subclass’s layout, since that only checks if the subclass is valid and then asserts that all superclasses are valid.

Is the bug that they layout code assumes that “record valid => superclass records valid”, or is the bug that the code that marks the superclass as invalid doesn’t mark all subclasses invalid too?

Likewise, should a class being valid imply that all its methods and fields are valid? One possible fix for PR18284 is to stop marking a class invalid when one of its methods is invalid (this is currently done in some cases, but not in all), but that doesn’t seem like the right fix.


I think the right fix for PR18284 is to mark just the method invalid. The problem of invalid base classes still needs to be solved, though.