From 58379db562194fb83457f232d71db5ee20daedf3 Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Fri, 26 May 2017 10:28:00 +0200 Subject: [PATCH] Fix #2533: Fold refinement with error info to error --- compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala | 3 ++- tests/neg/i2533.scala | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 tests/neg/i2533.scala diff --git a/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala b/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala index 93bd2528c380..10f2cf7e726d 100644 --- a/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala +++ b/compiler/src/dotty/tools/dotc/typer/TypeAssigner.scala @@ -465,7 +465,8 @@ trait TypeAssigner { def addRefinement(parent: Type, refinement: Tree): Type = { val rsym = refinement.symbol val rinfo = if (rsym is Accessor) rsym.info.resultType else rsym.info - RefinedType(parent, rsym.name, rinfo) + if (rinfo.isError) rinfo + else RefinedType(parent, rsym.name, rinfo) } val refined = (parent.tpe /: refinements)(addRefinement) tree.withType(RecType.closeOver(rt => refined.substThis(refineCls, RecThis(rt)))) diff --git a/tests/neg/i2533.scala b/tests/neg/i2533.scala new file mode 100644 index 000000000000..8913d8fe2869 --- /dev/null +++ b/tests/neg/i2533.scala @@ -0,0 +1,3 @@ +object Foo { + def test(f: { type A = A }): Int = ??? // error +}