Skip to content
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

mixin transformer crash on a local case class that extends specially crafted traits #9284

Closed
scabug opened this issue Apr 28, 2015 · 2 comments

Comments

@scabug
Copy link

scabug commented Apr 28, 2015

trait Context {
  val universe: Any  
}

object Macros {
  def impl(c: Context) = {
    trait A { def a = c.universe }
    trait B { def b = c.universe }
    case class C() extends A with B
    ??? 
  }
}
15:57 ~/Projects/211x/sandbox (2.11.x)$ s
error: java.lang.AssertionError: assertion failed: List(value c$1, value c$1)
	at scala.Predef$.assert(Predef.scala:165)
	at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1922)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.scala$tools$nsc$transform$Mixin$MixinTransformer$AddInitBitsTransformer$$checkedGetter(Mixin.scala:951)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$transformStats$1.apply(Mixin.scala:963)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$transformStats$1.apply(Mixin.scala:962)
	at scala.collection.immutable.List.flatMap(List.scala:327)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.transformStats(Mixin.scala:962)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.transformStats(Mixin.scala:949)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1366)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$addInitBits$1(Mixin.scala:977)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$5.apply(Mixin.scala:921)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$5.apply(Mixin.scala:921)
	at scala.reflect.internal.Trees$class.deriveDefDef(Trees.scala:1810)
	at scala.reflect.internal.SymbolTable.deriveDefDef(SymbolTable.scala:16)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1(Mixin.scala:921)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addCheckedGetters$1$1.apply(Mixin.scala:944)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addCheckedGetters$1$1.apply(Mixin.scala:943)
	at scala.collection.immutable.List.map(List.scala:277)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.addCheckedGetters$1(Mixin.scala:943)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.addNewDefs(Mixin.scala:1005)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1164)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
	at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:235)
	at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:256)
	at scala.tools.nsc.Global.exitingMixin(Global.scala:1051)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1261)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1408)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1407)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1406)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:173)
	at scala.collection.immutable.List.mapConserve(List.scala:189)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1425)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:147)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply$mcV$sp(Global.scala:441)
	at scala.tools.nsc.Global$GlobalPhase.withCurrentUnit(Global.scala:432)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:441)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:399)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:399)
	at scala.collection.Iterator$class.foreach(Iterator.scala:750)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:399)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1500)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1487)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1482)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1581)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:51)
	at scala.tools.nsc.Driver.main(Driver.scala:64)
	at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.AssertionError: assertion failed: List(value c$1, value c$1)
	at scala.Predef$.assert(Predef.scala:165)
	at scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:1922)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.scala$tools$nsc$transform$Mixin$MixinTransformer$AddInitBitsTransformer$$checkedGetter(Mixin.scala:951)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$transformStats$1.apply(Mixin.scala:963)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1$$anonfun$transformStats$1.apply(Mixin.scala:962)
	at scala.collection.immutable.List.flatMap(List.scala:327)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.transformStats(Mixin.scala:962)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$AddInitBitsTransformer$1.transformStats(Mixin.scala:949)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1366)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$addInitBits$1(Mixin.scala:977)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$5.apply(Mixin.scala:921)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1$5.apply(Mixin.scala:921)
	at scala.reflect.internal.Trees$class.deriveDefDef(Trees.scala:1810)
	at scala.reflect.internal.SymbolTable.deriveDefDef(SymbolTable.scala:16)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$dd$1(Mixin.scala:921)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addCheckedGetters$1$1.apply(Mixin.scala:944)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addCheckedGetters$1$1.apply(Mixin.scala:943)
	at scala.collection.immutable.List.map(List.scala:277)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.addCheckedGetters$1(Mixin.scala:943)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.addNewDefs(Mixin.scala:1005)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1164)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
	at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
	at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:235)
	at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:256)
	at scala.tools.nsc.Global.exitingMixin(Global.scala:1051)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1261)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1408)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1407)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1406)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
	at scala.collection.immutable.List.loop$1(List.scala:173)
	at scala.collection.immutable.List.mapConserve(List.scala:189)
	at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1425)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
	at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:468)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:147)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply$mcV$sp(Global.scala:441)
	at scala.tools.nsc.Global$GlobalPhase.withCurrentUnit(Global.scala:432)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:441)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:399)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:399)
	at scala.collection.Iterator$class.foreach(Iterator.scala:750)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1202)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:399)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1500)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1487)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1482)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1581)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
	at scala.tools.nsc.Driver.process(Driver.scala:51)
	at scala.tools.nsc.Driver.main(Driver.scala:64)
	at scala.tools.nsc.Main.main(Main.scala)

Found by @fdietze in scalamacros/paradise#65.

@scabug
Copy link
Author

scabug commented Apr 28, 2015

Imported From: https://issues.scala-lang.org/browse/SI-9284?orig=1
Reporter: @xeno-by
Affected Versions: 2.11.6

@hrhino
Copy link
Member

hrhino commented Feb 7, 2018

Fixed in 2.12.0.

@hrhino hrhino closed this as completed Feb 7, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants