diff --git a/pkg/vm_service/test/breakpoint_on_record_assignment_test.dart b/pkg/vm_service/test/breakpoint_on_record_assignment_test.dart
new file mode 100644
index 0000000..ddb6cc0
--- /dev/null
+++ b/pkg/vm_service/test/breakpoint_on_record_assignment_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2023, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=3.0
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+const int LINE = 14;
+const String file = "breakpoint_on_record_assignment_test.dart";
+
+testMain() {
+  (int, String name, bool) triple = (3, 'f', true);
+  ({int n, String s}) pair = (n: 2, s: 's');
+  (bool, num, {int n, String s}) quad = (false, 3.14, n: 7, s: 'd');
+  print('$pair $triple $quad');
+}
+
+var tests = <IsolateTest>[
+  hasPausedAtStart,
+  setBreakpointAtUriAndLine(file, LINE),
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE),
+  setBreakpointAtUriAndLine(file, LINE + 1),
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE + 1),
+  setBreakpointAtUriAndLine(file, LINE + 2),
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE + 2),
+  setBreakpointAtUriAndLine(file, LINE + 3),
+  resumeIsolate,
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(LINE + 3),
+];
+
+main(args) {
+  runIsolateTestsSynchronous(
+    args,
+    tests,
+    'breakpoint_on_record_assignment_test.dart',
+    testeeConcurrent: testMain,
+    pause_on_start: true,
+    pause_on_exit: true,
+  );
+}
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index ed7cff3..0a8ce2a 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -1828,13 +1828,15 @@
     return false;
   }
   Definition* definition = value->definition();
-  if (definition->IsConstant() || definition->IsLoadStaticField()) {
+  if (definition->IsConstant() || definition->IsLoadStaticField() ||
+      definition->IsLoadLocal() || definition->IsAssertAssignable() ||
+      definition->IsAllocateSmallRecord() || definition->IsAllocateRecord()) {
     return true;
   }
   if (auto const alloc = definition->AsAllocateClosure()) {
     return !alloc->known_function().IsNull();
   }
-  return definition->IsLoadLocal() || definition->IsAssertAssignable();
+  return false;
 }
 
 Fragment FlowGraphBuilder::EvaluateAssertion() {
