diff options
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index a26f251cbdb..cc68a7f02f8 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -8618,10 +8618,14 @@ void ASTReader::FinishedDeserializing() { if (NumCurrentElementsDeserializing == 0) { // Propagate exception specification updates along redeclaration chains. - for (auto Update : PendingExceptionSpecUpdates) { - auto *FPT = Update.second->getType()->castAs<FunctionProtoType>(); - SemaObj->UpdateExceptionSpec(Update.second, - FPT->getExtProtoInfo().ExceptionSpec); + while (!PendingExceptionSpecUpdates.empty()) { + auto Updates = std::move(PendingExceptionSpecUpdates); + PendingExceptionSpecUpdates.clear(); + for (auto Update : Updates) { + auto *FPT = Update.second->getType()->castAs<FunctionProtoType>(); + SemaObj->UpdateExceptionSpec(Update.second, + FPT->getExtProtoInfo().ExceptionSpec); + } } diagnoseOdrViolations(); |