diff --git a/compiler/test/dotty/tools/dotc/BootstrappedOnlyCompilationTests.scala b/compiler/test/dotty/tools/dotc/BootstrappedOnlyCompilationTests.scala index 633f2d6758d2..7613bea1c5dd 100644 --- a/compiler/test/dotty/tools/dotc/BootstrappedOnlyCompilationTests.scala +++ b/compiler/test/dotty/tools/dotc/BootstrappedOnlyCompilationTests.scala @@ -36,6 +36,7 @@ class BootstrappedOnlyCompilationTests extends ParallelTesting { compileFilesInDir("tests/bench", defaultOptions), compileFilesInDir("tests/pos-macros", defaultOptions), compileFilesInDir("tests/pos-custom-args/semanticdb", defaultOptions.and("-Xsemanticdb")), + compileDir("tests/pos-special/i7592", defaultOptions.and("-Yretain-trees")), ).checkCompile() } diff --git a/tests/pos-special/i7592/Macros_1.scala b/tests/pos-special/i7592/Macros_1.scala new file mode 100644 index 000000000000..6a528ca073ba --- /dev/null +++ b/tests/pos-special/i7592/Macros_1.scala @@ -0,0 +1,28 @@ +import scala.quoted._ + +def compileImpl[T](expr : Expr[T])(using Quotes) : Expr[T] = { + import quotes.reflect._ + + def proc(term : Term): Term = { + term match { + case Inlined(call, bindings, body) => Inlined(call, bindings, proc(body)) + case l : Literal => l + case Block(statements, expr) => + proc(expr) // FIXME: very wrong + case s : (Select|Ident) => { + if( s.symbol.isDefDef ) { + s.symbol.tree match { + case DefDef(name, typeParams, params, returnTp, Some(rhs)) => proc(rhs) + } + } else { + ??? + } + } + } + } + + proc(expr.asTerm).asExpr.asInstanceOf[Expr[T]] +} + +inline def compile[T](expr : =>T) : T = + ${ compileImpl('{ expr }) } diff --git a/tests/pos-special/i7592/Test_2.scala b/tests/pos-special/i7592/Test_2.scala new file mode 100644 index 000000000000..37ee3a1de243 --- /dev/null +++ b/tests/pos-special/i7592/Test_2.scala @@ -0,0 +1,5 @@ +def return1 = 1 + +def testReturn1 = { + assert(1 == compile(return1)) +}