summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-03-05 07:57:23 -0800
committerPaul Phillips <paulp@improving.org>2013-03-05 07:57:23 -0800
commit1a84c86ce400d0a80065fa8d23a9506dc19e92f0 (patch)
treebf70ba1f113b8bb535850b5e42f27a51dcb2eff4
parent5d54cf9e375d796c59b1dd488c15f88f4bfb14d6 (diff)
parent1117be8418525ce20af847bdcfdbbe66b9cf3d4d (diff)
downloadscala-1a84c86ce400d0a80065fa8d23a9506dc19e92f0.tar.gz
scala-1a84c86ce400d0a80065fa8d23a9506dc19e92f0.tar.bz2
scala-1a84c86ce400d0a80065fa8d23a9506dc19e92f0.zip
Merge pull request #2178 from scalamacros/ticket/7190
SI-7190 macros no longer give rise to bridges
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala1
-rw-r--r--test/files/pos/t7190.scala26
2 files changed, 27 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 889d309ba9..cb5268c422 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -477,6 +477,7 @@ abstract class Erasure extends AddInterfaces
def checkPair(member: Symbol, other: Symbol) {
val otpe = specialErasure(root)(other.tpe)
val bridgeNeeded = afterErasure (
+ !member.isMacro &&
!(other.tpe =:= member.tpe) &&
!(deconstMap(other.tpe) =:= deconstMap(member.tpe)) &&
{ var e = bridgesScope.lookupEntry(member.name)
diff --git a/test/files/pos/t7190.scala b/test/files/pos/t7190.scala
new file mode 100644
index 0000000000..f7ccded1b4
--- /dev/null
+++ b/test/files/pos/t7190.scala
@@ -0,0 +1,26 @@
+import scala.language.experimental.macros
+import scala.reflect.macros._
+
+trait A[T] {
+ def min[U >: T](implicit ord: Numeric[U]): T = macro A.min[T, U]
+}
+
+object A {
+ def min[T: c.WeakTypeTag, U >: T: c.WeakTypeTag](c: Context)(ord: c.Expr[Numeric[U]]): c.Expr[T] = {
+ c.universe.reify {
+ ord.splice.zero.asInstanceOf[T]
+ }
+ }
+}
+
+class B extends A[Int] {
+ override def min[U >: Int](implicit ord: Numeric[U]): Int = macro B.min[U]
+}
+
+object B {
+ def min[U >: Int: c.WeakTypeTag](c: Context)(ord: c.Expr[Numeric[U]]): c.Expr[Int] = {
+ c.universe.reify {
+ ord.splice.zero.asInstanceOf[Int]
+ }
+ }
+} \ No newline at end of file