Skip to content

Macros: Failure to compile redirecting factories #55807

Open
@helightdev

Description

@helightdev

While working on a port of my serialization library, I found following compiler crash while implementing a redirecting factory.

Crash when compiling:
org-dartlang-augmentation:/REDACTED/factories_minimal_report/bin/factories_minimal_report.dart-1:4:18: Internal problem: Expected 'null', but got 'ReturnStatement'.
int? arg;factory Test({int? arg}) = TestImpl;Test.name({this.arg});
                 ^

#0      internalProblem (package:front_end/src/fasta/problems.dart:52:5)
#1      unexpected (package:front_end/src/fasta/problems.dart:78:10)
#2      RedirectingFactoryBuilder.setRedirectingFactoryBody (package:front_end/src/fasta/source/source_factory_builder.dart:388:7)
#3      ClassDeclarationMixin.resolveConstructors (package:front_end/src/fasta/source/class_declaration.dart:161:25)
#4      SourceLibraryBuilder.resolveConstructors (package:front_end/src/fasta/source/source_library_builder.dart:1618:24)
#5      SourceLibraryBuilder.resolveConstructors (package:front_end/src/fasta/source/source_library_builder.dart:1611:38)
#6      SourceLoader.resolveConstructors (package:front_end/src/fasta/source/source_loader.dart:1688:24)
#7      KernelTarget.buildOutlines.<anonymous closure> (package:front_end/src/fasta/kernel/kernel_target.dart:522:14)
<asynchronous suspension>
#8      withCrashReporting (package:front_end/src/fasta/crash.dart:133:12)
<asynchronous suspension>
#9      KernelTarget.buildOutlines (package:front_end/src/fasta/kernel/kernel_target.dart:427:12)
<asynchronous suspension>
#10     _buildInternal (package:front_end/src/kernel_generator_impl.dart:152:7)
<asynchronous suspension>
#11     withCrashReporting (package:front_end/src/fasta/crash.dart:133:12)
<asynchronous suspension>
#12     generateKernel.<anonymous closure> (package:front_end/src/kernel_generator_impl.dart:50:12)
<asynchronous suspension>
#13     CompilerContext.clear (package:front_end/src/fasta/compiler_context.dart:130:3)
<asynchronous suspension>
#14     generateKernel (package:front_end/src/kernel_generator_impl.dart:49:10)
<asynchronous suspension>
#15     kernelForModule (package:front_end/src/api_prototype/kernel_generator.dart:106:11)
<asynchronous suspension>
#16     SingleShotCompilerWrapper.compileInternal (file:///REDACTED/dart-sdk/sdk/pkg/vm/bin/kernel_service.dart:405:11)
<asynchronous suspension>
#17     Compiler.compile.<anonymous closure> (file:///REDACTED/dart-sdk/sdk/pkg/vm/bin/kernel_service.dart:216:45)
<asynchronous suspension>
#18     _processLoadRequest (file:///REDACTED/dart-sdk/sdk/pkg/vm/bin/kernel_service.dart:887:37)
<asynchronous suspension>

While the analyzer runs without any errors and also recognized the constructor, trying to run the code via dart run results in the previously included crash. Using non redirecting factories works like expected.

Isolated example: https://github.com/helightdev/FactoriesIssueMinimal

dart --version:

Dart SDK version: 3.5.0-edge.fb057ea4e07de2af624688455925c0ca07afe04f (main) (Wed May 22 05:18:52 2024 +0000) on "linux_x64"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions