Skip to content

Not regular-bound extension type crashes compiler #53123

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Tracked by #49732
sgrekhov opened this issue Aug 4, 2023 · 7 comments
Closed
Tracked by #49732

Not regular-bound extension type crashes compiler #53123

sgrekhov opened this issue Aug 4, 2023 · 7 comments
Assignees
Labels
crash Process exits with SIGSEGV, SIGABRT, etc. An unhandled exception is not a crash. legacy-area-analyzer Use area-devexp instead. P2 A bug or feature request we're likely to work on

Comments

@sgrekhov
Copy link
Contributor

sgrekhov commented Aug 4, 2023

The following test crashes analyzer and CFE

// SharedOptions=--enable-experiment=inline-class

extension type V<T extends V<T>>(T id) {}

main() {
  List<V> l = [];
//     ^
// [analyzer] unspecified
// [cfe] unspecified
}

Output

/========================================================================================================================\
| co19/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02 is new and failed (Crash, expected Pass) |
\========================================================================================================================/

--- Command "dart2analyzer" (took 02.000968s):
DART_CONFIGURATION=ReleaseX64 out/ReleaseX64/dart-sdk/bin/dart out/ReleaseX64/gen/dartanalyzer.dart.snapshot -Dtest_runner.configuration=analyzer-asserts-linux --enable-experiment=inline-class --ignore-unrecognized-flags --packages=/b/s/w/ir/cache/builder/sdk/.dart_tool/package_config.json --format=json /b/s/w/ir/cache/builder/sdk/tests/co19/src/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02.dart

analyzer json parse result:
- parse failed

exit code:
253

stderr:
Unhandled exception:
Stack Overflow
#0      _LinkedHashMapMixin._insert (dart:collection-patch/compact_hash.dart:462:3)
#1      _LinkedHashMapMixin._set (dart:collection-patch/compact_hash.dart:519:7)
#2      _LinkedHashMapMixin._insert (dart:collection-patch/compact_hash.dart:465:7)
#3      _LinkedHashMapMixin._set (dart:collection-patch/compact_hash.dart:519:7)
#4      MapBase._fillMapWithIterables (dart:collection/maps.dart:172:10)
#5      new LinkedHashMap.fromIterables (dart:collection/linked_hash_map.dart:246:13)
#6      Substitution.fromPairs (package:analyzer/src/dart/element/type_algebra.dart:214:7)
#7      Substitution.fromInterfaceType (package:analyzer/src/dart/element/type_algebra.dart:192:12)
#8      InterfaceTypeImpl.representationType (package:analyzer/src/dart/element/type.dart:662:41)
#9      TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1310:16)
#10     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#11     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#12     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#13     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#14     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#15     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#16     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#17     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#18     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#19     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#20     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#21     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#22     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#23     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#24     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#25     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#26     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#27     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#28     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#29     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#30     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#31     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#32     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#33     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#34     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#35     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#36     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#37     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#38     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#39     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#40     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#41     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#42     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#43     TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
...
...
#9440   TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#9441   TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#9442   TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#9443   TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1311:16)
#9444   TypeSystemImpl.isNonNullable (package:analyzer/src/dart/element/type_system.dart:1315:31)
#9445   _Node._evaluateWithType (package:analyzer/src/summary2/extension_type.dart:110:41)
#9446   _Node._evaluate (package:analyzer/src/summary2/extension_type.dart:95:5)
#9447   _Walker.evaluate (package:analyzer/src/summary2/extension_type.dart:138:7)
#9448   DependencyWalker.walk.strongConnect (package:_fe_analyzer_shared/src/util/dependency_walker.dart:102:13)
#9449   DependencyWalker.walk (package:_fe_analyzer_shared/src/util/dependency_walker.dart:121:5)
#9450   buildExtensionTypes (package:analyzer/src/summary2/extension_type.dart:30:12)
#9451   TypesBuilder.build (package:analyzer/src/summary2/types_builder.dart:102:5)
#9452   Linker._resolveTypes (package:analyzer/src/summary2/link.dart:298:24)
#9453   Linker._buildOutlines (package:analyzer/src/summary2/link.dart:131:5)
#9454   _FutureListener.handleValue (dart:async/future_impl.dart:159:18)
#9455   Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:843:45)
#9456   Future._propagateToListeners (dart:async/future_impl.dart:872:13)
#9457   _FutureListener.handleValue (dart:async/future_impl.dart:159:18)
#9458   Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:843:45)
#9459   Future._propagateToListeners (dart:async/future_impl.dart:872:13)
#9460   _FutureListener.handleValue (dart:async/future_impl.dart:159:18)
#9461   Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:843:45)
#9462   Future._propagateToListeners (dart:async/future_impl.dart:872:13)
#9463   _FutureListener.handleValue (dart:async/future_impl.dart:159:18)
#9464   Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:843:45)
#9465   Future._propagateToListeners (dart:async/future_impl.dart:872:13)
#9466   _FutureListener.handleValue (dart:async/future_impl.dart:159:18)
#9467   Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:843:45)
#9468   Future._propagateToListeners (dart:async/future_impl.dart:872:13)
#9469   _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#9470   _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#9471   _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:185:5)


#0      LibraryContext._throwLibraryCycleLinkException (package:analyzer/src/dart/analysis/library_context.dart:321:5)
#1      LibraryContext.load.loadBundle (package:analyzer/src/dart/analysis/library_context.dart:188:11)
<asynchronous suspension>
#2      LibraryContext.load.<anonymous closure> (package:analyzer/src/dart/analysis/library_context.dart:246:7)
<asynchronous suspension>
#3      PerformanceLog.runAsync (package:analyzer/src/dart/analysis/performance_logger.dart:50:14)
<asynchronous suspension>
#4      LibraryContext.load (package:analyzer/src/dart/analysis/library_context.dart:244:5)
<asynchronous suspension>
#5      AnalysisDriver._computeUnitElement.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1510:7)
<asynchronous suspension>
#6      PerformanceLog.runAsync (package:analyzer/src/dart/analysis/performance_logger.dart:50:14)
<asynchronous suspension>
#7      AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:1127:22)
<asynchronous suspension>
#8      AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2252:7)
<asynchronous suspension>

--- Re-run this test:
python3 tools/test.py -n analyzer-asserts-linux co19/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02
@sgrekhov sgrekhov added the crash Process exits with SIGSEGV, SIGABRT, etc. An unhandled exception is not a crash. label Aug 4, 2023
@mraleph mraleph added the legacy-area-front-end Legacy: Use area-dart-model instead. label Aug 4, 2023
@johnniwinther
Copy link
Member

johnniwinther commented Aug 4, 2023

This seems to only be crashing in the analyzer.

@johnniwinther johnniwinther added legacy-area-analyzer Use area-devexp instead. and removed legacy-area-front-end Legacy: Use area-dart-model instead. labels Aug 4, 2023
@sgrekhov
Copy link
Contributor Author

sgrekhov commented Aug 4, 2023

This is CFE crash log

/========================================================================================================================\
| co19/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02 is new and failed (Crash, expected Pass) |
\========================================================================================================================/

--- Command "fasta" (took 89ms):
(cd /b/s/w/ir/ ; DART_CONFIGURATION=ReleaseX64 ./out/ReleaseX64/dart ./pkg/front_end/tool/_fasta/compile.dart --verify --skip-platform-verification -o ./out/ReleaseX64/generated_compilations/cfe-strong-linux/tests_co19_src_LanguageFeatures_Extension-types_static_analysis_extension_types_A05_t02/out.dill --platform ./out/ReleaseX64/vm_platform_strong.dill -Dtest_runner.configuration=cfe-strong-linux --enable-experiment=inline-class --nnbd-strong --packages=./.dart_tool/package_config.json ./tests/co19/src/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02.dart )

exit code:
253

stderr:
Unhandled exception:
  Crash when compiling:
'package:front_end/src/fasta/kernel/type_algorithms.dart': Failed assertion: line 264 pos 14: 'false': Unexpected named type builder declaration: InlineClassBuilder(V).

#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2      substituteRange (package:front_end/src/fasta/kernel/type_algorithms.dart:264:14)
#3      calculateBounds (package:front_end/src/fasta/kernel/type_algorithms.dart:450:31)
#4      SourceLibraryBuilder.computeDefaultTypes.computeDefaultTypesForVariables (package:front_end/src/fasta/source/source_library_builder.dart:4202:48)
#5      SourceLibraryBuilder.computeDefaultTypes.computeDefaultValuesForDeclaration (package:front_end/src/fasta/source/source_library_builder.dart:4359:18)
#6      SourceLibraryBuilder.computeDefaultTypes (package:front_end/src/fasta/source/source_library_builder.dart:4385:7)
#7      SourceLoader.computeDefaultTypes (package:front_end/src/fasta/source/source_loader.dart:1865:24)
#8      KernelTarget.buildOutlines.<anonymous closure> (package:front_end/src/fasta/kernel/kernel_target.dart:421:14)
<asynchronous suspension>
#9      withCrashReporting (package:front_end/src/fasta/crash.dart:133:12)
<asynchronous suspension>
#10     KernelTarget.buildOutlines (package:front_end/src/fasta/kernel/kernel_target.dart:388:12)
<asynchronous suspension>
#11     CompileTask._buildOutline (file:///b/s/w/ir/pkg/front_end/tool/_fasta/entry_points.dart:393:31)
<asynchronous suspension>
#12     CompileTask.compile (file:///b/s/w/ir/pkg/front_end/tool/_fasta/entry_points.dart:433:31)
<asynchronous suspension>
#13     BatchCompiler.batchCompileImpl (file:///b/s/w/ir/pkg/front_end/tool/_fasta/entry_points.dart:221:5)
<asynchronous suspension>
#14     CompilerContext.clear (package:front_end/src/fasta/compiler_context.dart:139:3)
<asynchronous suspension>
#15     runProtectedFromAbort (file:///b/s/w/ir/pkg/front_end/tool/_fasta/command_line.dart:416:12)
<asynchronous suspension>
#16     BatchCompiler.run (file:///b/s/w/ir/pkg/front_end/tool/_fasta/entry_points.dart:173:13)
<asynchronous suspension>

--- Re-run this test:
python3 tools/test.py -n cfe-strong-linux co19/LanguageFeatures/Extension-types/static_analysis_extension_types_A05_t02

@johnniwinther johnniwinther added the legacy-area-front-end Legacy: Use area-dart-model instead. label Aug 7, 2023
@johnniwinther
Copy link
Member

@sgrekhov Thanks for the crash log.

@johnniwinther
Copy link
Member

The CFE is no longer crashing after https://dart-review.googlesource.com/c/sdk/+/318641 .

@johnniwinther johnniwinther removed the legacy-area-front-end Legacy: Use area-dart-model instead. label Aug 11, 2023
@bwilkerson
Copy link
Member

@scheglov

@bwilkerson bwilkerson added the P2 A bug or feature request we're likely to work on label Aug 14, 2023
@scheglov
Copy link
Contributor

Waiting for dart-lang/language#3263

@scheglov
Copy link
Contributor

This does not crash the analyzer anymore.

  solo_test_X() async {
    await assertNoErrorsInCode(r'''
extension type V<T extends V<T>>(T id) {}

main() {
  List<V> l = [];
//     ^
// [analyzer] unspecified
// [cfe] unspecified
}
''');
  }
    CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND [17, 1, "'T' can't be a supertype of its upper bound.", "Try using a type that is the same as or a subclass of 'V<T>'."]
    CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS [59, 1, "'V<dynamic>' doesn't conform to the bound 'V<V<dynamic>>' of the type parameter 'T'.", "Try using a type that is or is a subclass of 'V<V<dynamic>>'."]
    WarningCode.UNUSED_LOCAL_VARIABLE [62, 1, "The value of the local variable 'l' isn't used.", "Try removing the variable or using it."]

@scheglov scheglov self-assigned this Nov 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
crash Process exits with SIGSEGV, SIGABRT, etc. An unhandled exception is not a crash. legacy-area-analyzer Use area-devexp instead. P2 A bug or feature request we're likely to work on
Projects
None yet
Development

No branches or pull requests

5 participants