diff --git a/src/libponyc/expr/array.c b/src/libponyc/expr/array.c index 5821a435fa..e8f30e93e9 100644 --- a/src/libponyc/expr/array.c +++ b/src/libponyc/expr/array.c @@ -250,8 +250,9 @@ static bool infer_element_type(pass_opt_t* opt, ast_t* ast, { ast_t* dot = ast_parent(ast); antecedent_type = find_antecedent_type(opt, dot, NULL); - find_possible_iterator_element_types(opt, antecedent_type, - &possible_element_types); + if (antecedent_type != NULL) + find_possible_iterator_element_types(opt, antecedent_type, + &possible_element_types); } } diff --git a/test/libponyc/badpony.cc b/test/libponyc/badpony.cc index ddffc23c35..e6f5186a1c 100644 --- a/test/libponyc/badpony.cc +++ b/test/libponyc/badpony.cc @@ -988,3 +988,19 @@ TEST_F(BadPonyTest, IsComparingCreateSugar) DO(test_expected_errors(src, "refer", errs)); } } + +TEST_F(BadPonyTest, TypeErrorDuringArrayLiteralInference) +{ + // From issue 2602 + const char* src = + "class C\n" + "trait X\n" + "class ExpectX[T: X]\n" + " fun trigger(arg: Iterator[T]) =>\n" + " None\n" + + "actor Main\n" + " new create(env: Env) =>\n" + " ExpectX[C].trigger([C; C].values())"; + TEST_ERRORS_1(src, "type argument is outside its constraint"); +}