[L] Change in dart/sdk[main]: [record_use][tfa] Moving `isBeingUsed` to `NativeCodeOracle`

0 views
Skip to first unread message

Alexander Markov (Gerrit)

unread,
Mar 12, 2026, 3:28:23 PMMar 12
to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
Attention needed from Daco Harkes and Johnni Winther

Alexander Markov added 1 comment

File pkg/vm/lib/transformations/type_flow/native_code.dart
Line 300, Patchset 7: library.importUri.path == 'meta/meta.dart');
Alexander Markov . unresolved

Should not be a special case - just add entry point pragmas for the RecordUse class in that library.

Daco Harkes

Unfortunately, that doesn't work. There are already package published out there without a pragma.

(Honestly, I don't think this annotation should be in a package, it should be in the SDK. But that's a different discussion to have.)

Alexander Markov

We can change the package and re-publish. Given that the recording of usages is a new, not yet released feature, its okay if it would require a fairly new package version to work.

Also note that compiler *should not* recognize and specially handle some specific class in a third-party package. While we could move `@RecordUse` annotation to the Dart SDK, a better way would be to introduce a `pragma('record-use')` and define a
```
const RecordUse = pragma('record-use');
```
in a third-party package if needed (this declaration can be used as `@RecordUse`). Our compilers can recognize pragmas and work accordingly without any dependencies on package:meta. This would also remove the need to retain `RecordUse` class (`pragma` is already retained).
Open in Gerrit

Related details

Attention is currently required from:
  • Daco Harkes
  • Johnni Winther
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
Gerrit-Change-Number: 487360
Gerrit-PatchSet: 12
Gerrit-Owner: Daco Harkes <dacoh...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-Attention: Daco Harkes <dacoh...@google.com>
Gerrit-Attention: Johnni Winther <johnni...@google.com>
Gerrit-Comment-Date: Thu, 12 Mar 2026 19:28:20 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Daco Harkes <dacoh...@google.com>
Comment-In-Reply-To: Alexander Markov <alexm...@google.com>
unsatisfied_requirement
satisfied_requirement
open
diffy

Alexander Markov (Gerrit)

unread,
Mar 12, 2026, 3:42:04 PMMar 12
to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
Attention needed from Daco Harkes and Johnni Winther

Alexander Markov added 5 comments

File pkg/vm/lib/transformations/type_flow/native_code.dart
Line 128, Patchset 12 (Latest): klass.members.any(record_use.isBeingRecorded)) {
Alexander Markov . unresolved

Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

Line 256, Patchset 12 (Latest): nativeCodeOracle.isClassReferencedFromNativeCode(
Alexander Markov . unresolved

Could you explain this change? In general, if class has external usages it does not mean we need to retain all its fields. So this logic should be applies only to the classes being recorded, right?

File pkg/vm/lib/transformations/type_flow/signature_shaking.dart
Line 228, Patchset 12 (Latest): .isMemberReferencedFromNativeCode(member)) {
Alexander Markov . unresolved

Is this still needed? I think signature shaking of members referenced externally is disabled at L268-269.

File pkg/vm/lib/transformations/type_flow/transformer.dart
Line 2258, Patchset 12 (Latest): !shaker.isClassReferencedFromNativeCode(node)) {
Alexander Markov . unresolved

The extra condition is not needed, `isClassReferencedFromNativeCode` is already included into `isClassUsed` at this point.

Line 2273, Patchset 12 (Latest): !shaker.isClassReferencedFromNativeCode(node)) {
Alexander Markov . unresolved

ditto, also below

Gerrit-Comment-Date: Thu, 12 Mar 2026 19:42:00 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
satisfied_requirement
open
diffy

Johnni Winther (Gerrit)

unread,
Mar 13, 2026, 5:07:45 AMMar 13
to Daco Harkes, Alexander Markov, Commit Queue, rev...@dartlang.org
Attention needed from Daco Harkes

Johnni Winther voted Code-Review+1

Code-Review+1
Open in Gerrit

Related details

Attention is currently required from:
  • Daco Harkes
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedCommit-Message-Has-TEST
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
Gerrit-Change-Number: 487360
Gerrit-PatchSet: 12
Gerrit-Owner: Daco Harkes <dacoh...@google.com>
Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-Attention: Daco Harkes <dacoh...@google.com>
Gerrit-Comment-Date: Fri, 13 Mar 2026 09:07:41 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
open
diffy

Daco Harkes (Gerrit)

unread,
Mar 13, 2026, 6:49:51 AMMar 13
to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
Attention needed from Alexander Markov and Johnni Winther

Daco Harkes voted and added 6 comments

Votes added by Daco Harkes

Commit-Queue+1

6 comments

File pkg/vm/lib/transformations/type_flow/native_code.dart
Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
Alexander Markov . unresolved

Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

Daco Harkes

It's to prevent marking enums as classes in

```
if (!shaker.isClassAllocated(node) &&
!shaker.isClassReferencedFromNativeCode(node)) {
// Prevent TFA from making the class abstract or changing its enum status
// if itself or its members are recorded. If it becomes abstract or loses
// its enum status, record_use might report it incorrectly (e.g. as a
// class instead of an enum).
debugPrint('Class ${node.name} converted to abstract');
node.isAbstract = true;
node.isEnum = false;
}
```

Added more comments.

Line 256, Patchset 12: nativeCodeOracle.isClassReferencedFromNativeCode(
Alexander Markov . resolved

Could you explain this change? In general, if class has external usages it does not mean we need to retain all its fields. So this logic should be applies only to the classes being recorded, right?

Daco Harkes

Done

Line 300, Patchset 7: library.importUri.path == 'meta/meta.dart');
Alexander Markov . resolved

Should not be a special case - just add entry point pragmas for the RecordUse class in that library.

Daco Harkes

Unfortunately, that doesn't work. There are already package published out there without a pragma.

(Honestly, I don't think this annotation should be in a package, it should be in the SDK. But that's a different discussion to have.)

Alexander Markov

We can change the package and re-publish. Given that the recording of usages is a new, not yet released feature, its okay if it would require a fairly new package version to work.

Also note that compiler *should not* recognize and specially handle some specific class in a third-party package. While we could move `@RecordUse` annotation to the Dart SDK, a better way would be to introduce a `pragma('record-use')` and define a
```
const RecordUse = pragma('record-use');
```
in a third-party package if needed (this declaration can be used as `@RecordUse`). Our compilers can recognize pragmas and work accordingly without any dependencies on package:meta. This would also remove the need to retain `RecordUse` class (`pragma` is already retained).
Daco Harkes

We can change the package and re-publish. Given that the recording of usages is a new, not yet released feature, its okay if it would require a fairly new package version to work.

Good point!

---

Yeah, I also have the feeling that it should live in the SDK: https://github.com/dart-lang/native/issues/2680

Pragma's would indeed be nice. It fits very well with the fact that it's a compiler feature. However, we'd also lose the `@Target` analyzer support that we have for custom annotations. And PMs & devrel might have opinions about the API from a holistic POV. I'll revisit this when we get closer to the final API & user journeys.

For now, I'll add the pragma in meta.

File pkg/vm/lib/transformations/type_flow/signature_shaking.dart
Line 228, Patchset 12: .isMemberReferencedFromNativeCode(member)) {
Alexander Markov . resolved

Is this still needed? I think signature shaking of members referenced externally is disabled at L268-269.

Daco Harkes

Done

File pkg/vm/lib/transformations/type_flow/transformer.dart
Line 2258, Patchset 12: !shaker.isClassReferencedFromNativeCode(node)) {
Alexander Markov . resolved

The extra condition is not needed, `isClassReferencedFromNativeCode` is already included into `isClassUsed` at this point.

Daco Harkes

Done

Line 2273, Patchset 12: !shaker.isClassReferencedFromNativeCode(node)) {
Alexander Markov . resolved

ditto, also below

Daco Harkes

Done

Open in Gerrit

Related details

Attention is currently required from:
  • Alexander Markov
  • Johnni Winther
Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 15
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Alexander Markov <alexm...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 10:49:46 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: Yes
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Alexander Markov (Gerrit)

    unread,
    Mar 13, 2026, 9:31:27 AMMar 13
    to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Daco Harkes and Johnni Winther

    Alexander Markov added 3 comments

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
    Alexander Markov . unresolved

    Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

    Daco Harkes

    It's to prevent marking enums as classes in

    ```
    if (!shaker.isClassAllocated(node) &&
    !shaker.isClassReferencedFromNativeCode(node)) {
    // Prevent TFA from making the class abstract or changing its enum status
    // if itself or its members are recorded. If it becomes abstract or loses
    // its enum status, record_use might report it incorrectly (e.g. as a
    // class instead of an enum).
    debugPrint('Class ${node.name} converted to abstract');
    node.isAbstract = true;
    node.isEnum = false;
    }
    ```

    Added more comments.

    Alexander Markov

    This would only happen if there are no instances allocated, e.g. there are no uses of enum values. Why do we need to report any usages in such a case? Also, if enum element is marked as setMemberReferencedFromNativeCode, then its value is retained and enum class would be marked as isClassAllocated because constant value of that enum element is an instance of the enum class.

    File pkg/vm/lib/transformations/type_flow/transformer.dart
    Line 2294, Patchset 16 (Latest): !shaker.isClassReferencedFromNativeCode(node)) {
    Alexander Markov . unresolved

    If !shaker.isClassAllocated, we should not report any usages of the enum, so this should not be needed.

    Line 2312, Patchset 16 (Latest): !shaker.isMemberReferencedFromNativeCode(node)) {
    Alexander Markov . unresolved

    Not needed as isMemberReferencedFromNativeCode members should be already added to isMemberUsed at this point. Also note that we cannot decide to retain a member here (during shaker pass 2) as it is a much more complicated process, see TreeShaker.addUsedMember which is called during shaker pass 1.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Daco Harkes
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 16
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Daco Harkes <dacoh...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 13:31:22 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Daco Harkes (Gerrit)

    unread,
    Mar 13, 2026, 9:48:56 AMMar 13
    to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Alexander Markov and Johnni Winther

    Daco Harkes added 3 comments

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
    Alexander Markov . unresolved

    Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

    Daco Harkes

    It's to prevent marking enums as classes in

    ```
    if (!shaker.isClassAllocated(node) &&
    !shaker.isClassReferencedFromNativeCode(node)) {
    // Prevent TFA from making the class abstract or changing its enum status
    // if itself or its members are recorded. If it becomes abstract or loses
    // its enum status, record_use might report it incorrectly (e.g. as a
    // class instead of an enum).
    debugPrint('Class ${node.name} converted to abstract');
    node.isAbstract = true;
    node.isEnum = false;
    }
    ```

    Added more comments.

    Alexander Markov

    This would only happen if there are no instances allocated, e.g. there are no uses of enum values. Why do we need to report any usages in such a case? Also, if enum element is marked as setMemberReferencedFromNativeCode, then its value is retained and enum class would be marked as isClassAllocated because constant value of that enum element is an instance of the enum class.

    Daco Harkes

    No it's also about static methods being recorded in enums. The parent of those methods is then falsely reported as aclass.

    File pkg/vm/lib/transformations/type_flow/transformer.dart
    Line 2294, Patchset 16: !shaker.isClassReferencedFromNativeCode(node)) {
    Alexander Markov . unresolved

    If !shaker.isClassAllocated, we should not report any usages of the enum, so this should not be needed.

    Daco Harkes

    This is for static methods on enhanced enums that need to have their parent reported as an enum.

    Line 2312, Patchset 16: !shaker.isMemberReferencedFromNativeCode(node)) {
    Alexander Markov . resolved

    Not needed as isMemberReferencedFromNativeCode members should be already added to isMemberUsed at this point. Also note that we cannot decide to retain a member here (during shaker pass 2) as it is a much more complicated process, see TreeShaker.addUsedMember which is called during shaker pass 1.

    Daco Harkes

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Markov
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 17
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Alexander Markov <alexm...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 13:48:52 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Daco Harkes (Gerrit)

    unread,
    Mar 13, 2026, 10:05:09 AMMar 13
    to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Alexander Markov and Johnni Winther

    Daco Harkes added 1 comment

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
    Alexander Markov . unresolved

    Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

    Daco Harkes

    It's to prevent marking enums as classes in

    ```
    if (!shaker.isClassAllocated(node) &&
    !shaker.isClassReferencedFromNativeCode(node)) {
    // Prevent TFA from making the class abstract or changing its enum status
    // if itself or its members are recorded. If it becomes abstract or loses
    // its enum status, record_use might report it incorrectly (e.g. as a
    // class instead of an enum).
    debugPrint('Class ${node.name} converted to abstract');
    node.isAbstract = true;
    node.isEnum = false;
    }
    ```

    Added more comments.

    Alexander Markov

    This would only happen if there are no instances allocated, e.g. there are no uses of enum values. Why do we need to report any usages in such a case? Also, if enum element is marked as setMemberReferencedFromNativeCode, then its value is retained and enum class would be marked as isClassAllocated because constant value of that enum element is an instance of the enum class.

    Daco Harkes

    No it's also about static methods being recorded in enums. The parent of those methods is then falsely reported as aclass.

    Daco Harkes

    I had this in an earlier patchset:

    https://dart-review.googlesource.com/c/sdk/+/485081/8/pkg/vm/lib/transformations/type_flow/transformer.dart

    But we were worried that having an abstract enum would be a combination of things that could lead to issues downstream. So then we disabled the whole optimization.

    Gerrit-Comment-Date: Fri, 13 Mar 2026 14:05:04 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Alexander Markov (Gerrit)

    unread,
    Mar 13, 2026, 10:21:53 AMMar 13
    to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Daco Harkes and Johnni Winther

    Alexander Markov added 1 comment

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
    Alexander Markov . unresolved

    Why is this needed? If member is being recorded, then it will be retained and its enclosing class will be retained as well, without additional handling.

    Daco Harkes

    It's to prevent marking enums as classes in

    ```
    if (!shaker.isClassAllocated(node) &&
    !shaker.isClassReferencedFromNativeCode(node)) {
    // Prevent TFA from making the class abstract or changing its enum status
    // if itself or its members are recorded. If it becomes abstract or loses
    // its enum status, record_use might report it incorrectly (e.g. as a
    // class instead of an enum).
    debugPrint('Class ${node.name} converted to abstract');
    node.isAbstract = true;
    node.isEnum = false;
    }
    ```

    Added more comments.

    Alexander Markov

    This would only happen if there are no instances allocated, e.g. there are no uses of enum values. Why do we need to report any usages in such a case? Also, if enum element is marked as setMemberReferencedFromNativeCode, then its value is retained and enum class would be marked as isClassAllocated because constant value of that enum element is an instance of the enum class.

    Daco Harkes

    No it's also about static methods being recorded in enums. The parent of those methods is then falsely reported as aclass.

    Alexander Markov

    Why is it important for users to distinguish enums and classes when usages of a static method are reported? Can we just report that Foo.bar is used, regardless of Foo being a class or enum?

    If you feel strongly about that, consider moving this logic to handling of members to avoid duplicate checks (we visit members anyway), something along the lines:
    ```
    visitProcedure(Procedure proc) {
    if (record_use.isBeingRecorded(proc)) {
    nativeCodeOracle.setMemberReferencedFromNativeCode(proc);
    final enclosingClass = proc.enclosingClass;
    if (enclosingClass != null) {
    // Do not transform enclosing class to guarantee accurate reporting of usages.
    nativeCodeOracle.addClassReferencedFromNativeCode(enclosingClass);
    }
    }
    ```
    Open in Gerrit

    Related details

    Attention is currently required from:
    • Daco Harkes
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 17
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Daco Harkes <dacoh...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 14:21:50 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Daco Harkes (Gerrit)

    unread,
    Mar 13, 2026, 10:55:46 AMMar 13
    to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Alexander Markov and Johnni Winther

    Daco Harkes added 1 comment

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Daco Harkes

    In the current way the API is set up, a class with a name is not the same as the enum with that name. And the API has only have one way to represent `Definition`s. We don't want to conflate enum and class instances. And, I'd also like to avoid using a different classes for `Definition`s.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Markov
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 18
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Alexander Markov <alexm...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 14:55:42 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Alexander Markov (Gerrit)

    unread,
    Mar 13, 2026, 12:40:44 PMMar 13
    to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Daco Harkes and Johnni Winther

    Alexander Markov added 1 comment

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Alexander Markov

    I assume you mean third_party/pkg/native/pkgs/record_use/lib/src/definition.dart API?

    Maybe I'm missing something, but what is the use case for providing `DefinitionKind` in the record use API? Say, if you're interested in all usages of `IconData`, why do you need to care if it is a class or enum? You actually know what you're looking for and what it is. As for the name conflicts, I don't think they can happen as classes and enums share the same name space. The only case which might potentially need disambiguation is setters, and we can follow Dart language specification which solves this via "The name of a setter is obtained by appending the string ā€˜=’ to the identifier given in its signature.").

    I keep questioning this because it seems like it adds unnecessary complexity and/or inefficiency without a good reason (without benefiting users). The remaining concern is related to the additional `!shaker.isClassReferencedFromNativeCode(node)` condition in the tree shaker. We should not really regress how we do tree shaking if recording of usages is not used at all (and when it is used we should only regress it for classes and members for which usages where requested). So, if you insist on keeping this API, then we should probably have a separate Set<Class> in the NatevCodeOracle, something like `_classesWithPersistentShape`/`isClassWithPersistentShape`/`addClassesWithPersistentShape`, add enclosing class of members being recorded and consult with it in tree shaker before turning enum into a class.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Daco Harkes
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 18
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Daco Harkes <dacoh...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 16:40:41 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Daco Harkes (Gerrit)

    unread,
    Mar 13, 2026, 1:36:48 PMMar 13
    to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Alexander Markov and Johnni Winther

    Daco Harkes added 2 comments

    Patchset-level comments
    File-level comment, Patchset 18 (Latest):
    Daco Harkes . resolved

    Thanks Alex, that makes sense! šŸ‘

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Daco Harkes

    Yes, indeed that's the API.

    You might be right about it not having a use case right now, but I don't want to set up this format that's untrue w.r.t. the Dart language specification. I don't want to lump classes and enums into the same kind. And I also don't want to simply remove the kind for class/enum but keep it for other things.

    A agree that this is complexity. But all of the 'preserving' or 'reconstructing' the source name and kind is the same complexity in all of the kernel lowering_predicates and TFA optimization disabling. (We also recover the getter/setter kinds for example.)

    I agree that having `_classesWithPersistentShape` sounds like a cleaner solution than what I did now. I shoehorned a bit too much into the existing API.

    I'll take a look at this on Monday.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Markov
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 18
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Alexander Markov <alexm...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Fri, 13 Mar 2026 17:36:44 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Daco Harkes (Gerrit)

    unread,
    Mar 16, 2026, 2:27:19 PMMar 16
    to Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
    Attention needed from Alexander Markov and Johnni Winther

    Daco Harkes added 2 comments

    File pkg/vm/lib/transformations/type_flow/native_code.dart
    Line 128, Patchset 12: klass.members.any(record_use.isBeingRecorded)) {
    Alexander Markov . resolved
    Daco Harkes

    Done

    File pkg/vm/lib/transformations/type_flow/transformer.dart
    Line 2294, Patchset 16: !shaker.isClassReferencedFromNativeCode(node)) {
    Alexander Markov . resolved

    If !shaker.isClassAllocated, we should not report any usages of the enum, so this should not be needed.

    Daco Harkes

    This is for static methods on enhanced enums that need to have their parent reported as an enum.

    Daco Harkes

    Done

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Alexander Markov
    • Johnni Winther
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement satisfiedCommit-Message-Has-TEST
    • requirement is not satisfiedReview-Enforcement
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: sdk
    Gerrit-Branch: main
    Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
    Gerrit-Change-Number: 487360
    Gerrit-PatchSet: 20
    Gerrit-Owner: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
    Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
    Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
    Gerrit-Attention: Alexander Markov <alexm...@google.com>
    Gerrit-Attention: Johnni Winther <johnni...@google.com>
    Gerrit-Comment-Date: Mon, 16 Mar 2026 18:27:15 +0000
    unsatisfied_requirement
    satisfied_requirement
    open
    diffy

    Alexander Markov (Gerrit)

    unread,
    Mar 16, 2026, 2:33:17 PMMar 16
    to Daco Harkes, Alexander Markov, Johnni Winther, Commit Queue, rev...@dartlang.org
    Attention needed from Daco Harkes and Johnni Winther

    Alexander Markov voted Code-Review+1

    Code-Review+1
    Open in Gerrit

    Related details

    Attention is currently required from:
    • Daco Harkes
    • Johnni Winther
    Submit Requirements:
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedCommit-Message-Has-TEST
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: sdk
      Gerrit-Branch: main
      Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
      Gerrit-Change-Number: 487360
      Gerrit-PatchSet: 20
      Gerrit-Owner: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
      Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
      Gerrit-Attention: Daco Harkes <dacoh...@google.com>
      Gerrit-Attention: Johnni Winther <johnni...@google.com>
      Gerrit-Comment-Date: Mon, 16 Mar 2026 18:33:15 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      unsatisfied_requirement
      satisfied_requirement
      open
      diffy

      Johnni Winther (Gerrit)

      unread,
      Mar 17, 2026, 4:32:04 AMMar 17
      to Daco Harkes, Alexander Markov, Commit Queue, rev...@dartlang.org
      Attention needed from Daco Harkes

      Johnni Winther voted Code-Review+1

      Code-Review+1
      Open in Gerrit

      Related details

      Attention is currently required from:
      • Daco Harkes
      Submit Requirements:
      • requirement is not satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedCommit-Message-Has-TEST
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: sdk
      Gerrit-Branch: main
      Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
      Gerrit-Change-Number: 487360
      Gerrit-PatchSet: 20
      Gerrit-Owner: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
      Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
      Gerrit-Attention: Daco Harkes <dacoh...@google.com>
      Gerrit-Comment-Date: Tue, 17 Mar 2026 08:31:59 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      unsatisfied_requirement
      satisfied_requirement
      open
      diffy

      Michael Goderbauer (Gerrit)

      unread,
      Mar 17, 2026, 4:45:16 AMMar 17
      to Daco Harkes, Johnni Winther, Alexander Markov, Commit Queue, rev...@dartlang.org
      Attention needed from Daco Harkes

      Michael Goderbauer voted Code-Review+1

      Code-Review+1
      Open in Gerrit

      Related details

      Attention is currently required from:
      • Daco Harkes
      Submit Requirements:
      • requirement satisfiedCode-Owners
      • requirement satisfiedCode-Review
      • requirement satisfiedCommit-Message-Has-TEST
      • requirement satisfiedReview-Enforcement
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: comment
      Gerrit-Project: sdk
      Gerrit-Branch: main
      Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
      Gerrit-Change-Number: 487360
      Gerrit-PatchSet: 20
      Gerrit-Owner: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
      Gerrit-Reviewer: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
      Gerrit-Reviewer: Michael Goderbauer <goder...@google.com>
      Gerrit-Attention: Daco Harkes <dacoh...@google.com>
      Gerrit-Comment-Date: Tue, 17 Mar 2026 08:45:12 +0000
      Gerrit-HasComments: No
      Gerrit-Has-Labels: Yes
      satisfied_requirement
      open
      diffy

      Commit Queue (Gerrit)

      unread,
      Mar 17, 2026, 4:46:50 AMMar 17
      to Daco Harkes, Michael Goderbauer, Johnni Winther, Alexander Markov, rev...@dartlang.org

      Commit Queue submitted the change

      Change information

      Commit message:
      [record_use][tfa] Moving `isBeingUsed` to `NativeCodeOracle`

      TEST=pkg/compiler/test/record_use/record_use_test.dart
      TEST=pkg/dart2wasm/test/record_use_test.dart
      TEST=pkg/vm/test/transformations/record_use_test.dart
      Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
      Cq-Include-Trybots: luci.dart.try:dart2wasm-asserts-linux-chrome-try,dart2wasm-asserts-minified-linux-d8-try,dart2wasm-linux-chrome-try,dart2wasm-linux-d8-try,dart2wasm-linux-firefox-try,dart2wasm-linux-jscm-chrome-try,dart2wasm-linux-optimized-jsc-try,pkg-linux-debug-try,pkg-linux-release-arm64-try,pkg-linux-release-try,pkg-mac-release-arm64-try,pkg-mac-release-try,pkg-win-release-arm64-try,pkg-win-release-try,dart2js-canary-linux-try,dart2js-hostasserts-linux-d8-try,dart2js-linux-chrome-try,dart2js-linux-firefox-try,dart2js-mac-chrome-try,dart2js-mac-safari-try,dart2js-minified-csp-linux-chrome-try,dart2js-minified-linux-d8-try,dart2js-unit-linux-x64-release-try,dart2js-win-chrome-try
      Reviewed-by: Alexander Markov <alexm...@google.com>
      Reviewed-by: Michael Goderbauer <goder...@google.com>
      Reviewed-by: Johnni Winther <johnni...@google.com>
      Files:
      • M pkg/front_end/lib/src/api_prototype/lowering_predicates.dart
      • M pkg/front_end/lib/src/kernel/record_use.dart
      • M pkg/meta/lib/meta.dart
      • M pkg/vm/lib/transformations/type_flow/native_code.dart
      • M pkg/vm/lib/transformations/type_flow/signature_shaking.dart
      • M pkg/vm/lib/transformations/type_flow/transformer.dart
      • M pkg/vm/testcases/transformations/record_use/lib/basic.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/complex.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/const_argument_instance.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enhanced_enum.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enum_const_arg.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enum_factory_constructor.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enum_instance_usage.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enum_mixin_static_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/enum_static_getters_setters.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_call_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_call_non_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_getters_setters.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_operator.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_static_call.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_static_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_tearoff_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_tearoff_non_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_call_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_call_non_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_getters_setters.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_operator.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_static_method.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_static_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_tearoff_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_type_tearoff_non_const_receiver.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/extension_unary_minus.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/external_function.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/factory_constructor.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/factory_direct.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/instance_class.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/instance_complex.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/instance_duplicates.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/instance_method.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/instance_not_annotation.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/large_integers.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/loading_units_simple.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/map_complex_keys.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/mixin.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/mixin_static_getters_setters.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_and_positional.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_both.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_constructors.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_optional.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_required.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/named_with_function_arg.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/nested.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/nested_instance_constant.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/non_const_constructor.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/non_const_constructor_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_constructor_named.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_constructor_positional.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_constructor_positional_multi.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_extension.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_extension_type.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_static_named.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_static_named_multi.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_static_positional.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/optional_defaults_static_positional_multi.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/partfile_main.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/positional_both.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/positional_both_with_type_argument.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/positional_optional.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/record_const.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/record_enum.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/record_instance_constant_empty.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_factory_const.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_factory_non_const.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_factory_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_factory_tearoff_const.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_factory_tearoff_multi.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_generative_constructor.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/redirecting_generative_transform.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/simple.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/static_getters_setters.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/symbol_const.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/top_level_method.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/top_level_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/typedef_factory_partial.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/typedef_non_generic.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/typedef_partial.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/typedef_tearoff.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/types_of_arguments.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/unsupported_class_instance_not_annotated.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/unsupported_collections.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/unsupported_enum_instance_not_annotated.dart.aot.expect
      • M pkg/vm/testcases/transformations/record_use/lib/unsupported_instance.dart.aot.expect
      • M pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
      • M pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
      • M pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
      Change size: L
      Delta: 97 files changed, 378 insertions(+), 107 deletions(-)
      Branch: refs/heads/main
      Submit Requirements:
      • requirement satisfiedCode-Review: +1 by Johnni Winther, +1 by Alexander Markov, +1 by Michael Goderbauer
      Open in Gerrit
      Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
      Gerrit-MessageType: merged
      Gerrit-Project: sdk
      Gerrit-Branch: main
      Gerrit-Change-Id: Ia277d274046ac3b587732bc9cf853dce12427db9
      Gerrit-Change-Number: 487360
      Gerrit-PatchSet: 21
      Gerrit-Owner: Daco Harkes <dacoh...@google.com>
      Gerrit-Reviewer: Alexander Markov <alexm...@google.com>
      open
      diffy
      satisfied_requirement
      Reply all
      Reply to author
      Forward
      0 new messages