blob: 2983decc0adae3d7d085dcaa8c0ceb806a6f15f1 [file] [log] [blame]
library;
//
// Problems in library:
//
// pkg/front_end/testcases/extension_types/issue53824.dart:5:25: Error: The representation type can't be a bottom type.
// extension type E1(Never foo) {} // Error.
// ^^^
//
// pkg/front_end/testcases/extension_types/issue53824.dart:6:38: Error: The representation type can't be a bottom type.
// extension type E2<X extends Never>(X foo) {} // Error.
// ^^^
//
// pkg/front_end/testcases/extension_types/issue53824.dart:7:51: Error: The representation type can't be a bottom type.
// extension type E3<X extends Y, Y extends Never>(X foo) {} // Error.
// ^^^
//
import self as self;
extension type E1(invalid-type foo) {
abstract extension-type-member representation-field get foo() Never;
constructor = self::E1|constructor#;
constructor tearoff = self::E1|constructor#_#new#tearOff;
}
extension type E2<X extends Never>(invalid-type foo) {
abstract extension-type-member representation-field get foo() X;
constructor = self::E2|constructor#;
constructor tearoff = self::E2|constructor#_#new#tearOff;
}
extension type E3<X extends Y = Never, Y extends Never>(invalid-type foo) {
abstract extension-type-member representation-field get foo() X;
constructor = self::E3|constructor#;
constructor tearoff = self::E3|constructor#_#new#tearOff;
}
static extension-type-member method E1|constructor#(Never foo) → self::E1% /* erasure=invalid-type, declared=! */ {
lowered final self::E1% /* erasure=invalid-type, declared=! */ #this = foo;
return #this;
}
static extension-type-member method E1|constructor#_#new#tearOff(Never foo) → self::E1% /* erasure=invalid-type, declared=! */
return self::E1|constructor#(foo);
static extension-type-member method E2|constructor#<X extends Never>(self::E2|constructor#::X foo) → self::E2<self::E2|constructor#::X>% /* erasure=invalid-type, declared=! */ {
lowered final self::E2<self::E2|constructor#::X>% /* erasure=invalid-type, declared=! */ #this = foo;
return #this;
}
static extension-type-member method E2|constructor#_#new#tearOff<X extends Never>(self::E2|constructor#_#new#tearOff::X foo) → self::E2<self::E2|constructor#_#new#tearOff::X>% /* erasure=invalid-type, declared=! */
return self::E2|constructor#<self::E2|constructor#_#new#tearOff::X>(foo);
static extension-type-member method E3|constructor#<X extends self::E3|constructor#::Y = Never, Y extends Never>(self::E3|constructor#::X foo) → self::E3<self::E3|constructor#::X, self::E3|constructor#::Y>% /* erasure=invalid-type, declared=! */ {
lowered final self::E3<self::E3|constructor#::X, self::E3|constructor#::Y>% /* erasure=invalid-type, declared=! */ #this = foo;
return #this;
}
static extension-type-member method E3|constructor#_#new#tearOff<X extends self::E3|constructor#_#new#tearOff::Y = Never, Y extends Never>(self::E3|constructor#_#new#tearOff::X foo) → self::E3<self::E3|constructor#_#new#tearOff::X, self::E3|constructor#_#new#tearOff::Y>% /* erasure=invalid-type, declared=! */
return self::E3|constructor#<self::E3|constructor#_#new#tearOff::X, self::E3|constructor#_#new#tearOff::Y>(foo);