From 701c06d033b9b4f7440eaf3f586cb829d41c9970 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Mon, 19 Apr 2021 19:57:08 +0000 Subject: [PATCH] [vm/reload] Do class reload type parameter count check before finalization. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes https://github.com/dart-lang/sdk/issues/45602 TEST=pkg/vm/test/incremental_compiler_test.dart Change-Id: Iebf64c4d7ca8ba42209de27fe35ab1e03302d308 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195305 Reviewed-by: RĂ©gis Crelier Commit-Queue: Alexander Aprelev --- runtime/vm/object_reload.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc index 0a8c71f8caa7..e075887dc0d9 100644 --- a/runtime/vm/object_reload.cc +++ b/runtime/vm/object_reload.cc @@ -657,6 +657,17 @@ void Class::CheckReload(const Class& replacement, } if (is_finalized()) { + // Make sure the declaration types parameter count matches for the two + // classes. + // ex. class A {} cannot be replace with class A {}. + auto group_context = context->group_reload_context(); + if (NumTypeParameters() != replacement.NumTypeParameters()) { + group_context->AddReasonForCancelling( + new (context->zone()) + TypeParametersChanged(context->zone(), *this, replacement)); + return; + } + // Ensure the replacement class is also finalized. const Error& error = Error::Handle(replacement.EnsureIsFinalized(Thread::Current()));