[ASTImporter] Fix 'isVirtual()' assert failure while import overridden methods
authordingfei <fding@feysh.com>
Tue, 18 Jul 2023 08:29:56 +0000 (16:29 +0800)
committerdingfei <fding@feysh.com>
Tue, 18 Jul 2023 08:29:56 +0000 (16:29 +0800)
commit5b99aa57f74e1432691f366d26a2ec21907a7a70
treee794863d41feb10615d20c4750fd198db54eff68
parente9ab43dd44cafe5a67f0a12b9ff1021d47074970
[ASTImporter] Fix 'isVirtual()' assert failure while import overridden methods

CXXMethodDecl::isVirtual() count the number of overridden methods.
This assertion is not true before overridden methods are fully loaded.
The body of this CXXMethodDecl can introduce deps on a derived class
which contains a method overriding this method, causing the assertion failure.

ImportOverriddenMethods() is moved before body loading to fix this issue.

Testcase is contributed by Balázs Kéri (balazske)

Differential Revision: https://reviews.llvm.org/D154701
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp