Fixes dart-lang/sdk#48391. Use function with 'no-inline' to create a WeakReference and to lost link to its target
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t01.dart
index 97643e1..ad3ddc3 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t01.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t01.dart
@@ -21,15 +21,22 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
-main() {
-  C? c = C(42);
+@pragma('vm:never-inline')
+WeakReference<C> createWeakReference() {
+  C c = C(42);
   WeakReference<C> wr = WeakReference(c);
   Expect.equals(c, wr.target);
   triggerGc();
   Expect.equals(c, wr.target);
-  c = null;
+  return wr;
+}
+
+main() {
+  WeakReference<C> wr = createWeakReference();
   triggerGc();
   Expect.isNull(wr.target);
 }
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t02.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t02.dart
index 93e8790..489419c 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t02.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t02.dart
@@ -21,16 +21,22 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
-main() {
+@pragma('vm:never-inline')
+WeakReference<C> createWeakReference() {
   List<C> refs = List.filled(5, C(42), growable: true);
-
-  WeakReference<C> wr = WeakReference(refs[0]);
+  WeakReference<C>  wr = WeakReference(refs[0]);
   Expect.equals(refs[0], wr.target);
   triggerGc();
   Expect.equals(refs[1], wr.target);
-  refs.clear();
+  return wr;
+}
+
+main() {
+  WeakReference<C> wr = createWeakReference();
   triggerGc();
   Expect.isNull(wr.target);
 }
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t03.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t03.dart
index 687aa64..f97ffb3 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t03.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t03.dart
@@ -21,16 +21,24 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
 C? c = C(42);
 
-main() {
+@pragma('vm:never-inline')
+WeakReference<C> createWeakReference() {
   WeakReference<C> wr = WeakReference(c!);
   Expect.equals(c, wr.target);
   triggerGc();
   Expect.equals(c, wr.target);
   c = null;
+  return wr;
+}
+main() {
+  WeakReference<C> wr = createWeakReference();
+  print(c);
   triggerGc();
   Expect.isNull(wr.target);
 }
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
index 453fc5a..65e26dc 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t04.dart
@@ -21,17 +21,29 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
-main() {
+dynamic d;
+
+@pragma('vm:never-inline')
+WeakReference<C> createWeakReference() {
   C? c = C(42);
-  dynamic d = c;
+  d = c;
   WeakReference<C> wr = WeakReference(c);
   Expect.equals(c, wr.target);
   c = null;
   triggerGc();
   Expect.isNotNull(wr.target);
   Expect.equals(d, wr.target);
+  return wr;
+}
+
+main() {
+  WeakReference<C> wr = createWeakReference();
+  triggerGc();
+  Expect.isNotNull(wr.target);
   d = 42;
   triggerGc();
   Expect.isNull(wr.target);
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
index be09c8d..56b3aa9 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t05.dart
@@ -21,6 +21,8 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
 main() async {
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
index 47d215d..c348ab2 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t06.dart
@@ -21,6 +21,8 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
 main() async {
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
index 5c92af2..8fa7593 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t07.dart
@@ -21,20 +21,30 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
+}
+
+C? c1;
+
+@pragma('vm:never-inline')
+WeakReference<C> createWeakReference() {
+  C? c2 = C(42);
+  c1 = c2;
+  WeakReference<C> wr = WeakReference(c2);
+  Expect.equals(c2, wr.target);
+  c2 = null;
+  triggerGc();
+  Expect.isNotNull(wr.target);
+  Expect.equals(c1, wr.target);
+  return wr;
 }
 
 main() {
-  C? c1 = C(42);
-  C? c2 = c1;
-  WeakReference<C> wr = WeakReference(c1);
-  Expect.equals(c1, wr.target);
-  triggerGc();
-  Expect.equals(c1, wr.target);
-  c1 = null;
+  WeakReference<C> wr = createWeakReference();
   triggerGc();
   Expect.isNotNull(wr.target);
-  Expect.equals(c2, wr.target);
-  c2 = null;
+  c1 = C(-1);
   triggerGc();
   Expect.isNull(wr.target);
 }
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
index ecd33b3..1617474 100644
--- a/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
+++ b/LanguageFeatures/FinalizationRegistry/ffi/WeakReference/weak_reference_target_t08.dart
@@ -21,10 +21,13 @@
 class C {
   int id;
   C(this.id);
+
+  String toString() => "C($id)";
 }
 
-main() {
-  C? c = C(42);
+@pragma('vm:never-inline')
+List<WeakReference<C>> createWeakReference() {
+  C c = C(42);
   WeakReference<C> wr1 = WeakReference(c);
   WeakReference<C> wr2 = WeakReference(c);
   Expect.equals(c, wr1.target);
@@ -32,8 +35,14 @@
   triggerGc();
   Expect.equals(c, wr1.target);
   Expect.equals(c, wr2.target);
-  c = null;
+  return [wr1, wr2];
+}
+
+main() {
+  List<WeakReference<C>> refs = createWeakReference();
+  Expect.isNotNull(refs[0].target);
+  Expect.isNotNull(refs[1].target);
   triggerGc();
-  Expect.isNull(wr1.target);
-  Expect.isNull(wr2.target);
+  Expect.isNull(refs[0].target);
+  Expect.isNull(refs[1].target);
 }