diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-06-18 19:33:06 +0200 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-06-18 19:33:06 +0200 |
commit | a83586a4815acd35df0801ed0e9f067e113c8664 (patch) | |
tree | f0efc810997d6d4089dadd5c443a00c10a63d09d /test/files/neg | |
parent | 9a28ee1ffc085bc680c48b12ad632b9133adf020 (diff) | |
download | scala-a83586a4815acd35df0801ed0e9f067e113c8664.tar.gz scala-a83586a4815acd35df0801ed0e9f067e113c8664.tar.bz2 scala-a83586a4815acd35df0801ed0e9f067e113c8664.zip |
Fix SI-4541.
Catch type errors when duplicating trees.
In this case, to access a protected member from a specialized
class is an error, so we would have to make the member public
anyway.
Better it is then to report an error and have the user make the
field public explicitly.
Review by @dragos.
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/t4541.check | 7 | ||||
-rw-r--r-- | test/files/neg/t4541.scala | 16 | ||||
-rw-r--r-- | test/files/neg/t4541b.check | 7 | ||||
-rw-r--r-- | test/files/neg/t4541b.scala | 16 |
4 files changed, 46 insertions, 0 deletions
diff --git a/test/files/neg/t4541.check b/test/files/neg/t4541.check new file mode 100644 index 0000000000..c01226685f --- /dev/null +++ b/test/files/neg/t4541.check @@ -0,0 +1,7 @@ +t4541.scala:11: error: scala.reflect.internal.Types$TypeError: variable data in class Sparse cannot be accessed in Sparse[Int] + Access to protected method data not permitted because + prefix type Sparse[Int] does not conform to + class Sparse$mcI$sp where the access take place + that.data + ^ +one error found
\ No newline at end of file diff --git a/test/files/neg/t4541.scala b/test/files/neg/t4541.scala new file mode 100644 index 0000000000..744af1c288 --- /dev/null +++ b/test/files/neg/t4541.scala @@ -0,0 +1,16 @@ + + + + + + +@SerialVersionUID(1L) +final class Sparse[@specialized(Int) T](d: Array[T]) extends Serializable { + protected var data: Array[T] = d + def set(that: Sparse[T]) = { + that.data + } +} + + + diff --git a/test/files/neg/t4541b.check b/test/files/neg/t4541b.check new file mode 100644 index 0000000000..54d9c3d1ee --- /dev/null +++ b/test/files/neg/t4541b.check @@ -0,0 +1,7 @@ +t4541b.scala:13: error: scala.reflect.internal.Types$TypeError: variable data in class SparseArray cannot be accessed in SparseArray[Int] + Access to protected method data not permitted because + prefix type SparseArray[Int] does not conform to + class SparseArray$mcI$sp where the access take place + use(that.data.clone) + ^ +one error found
\ No newline at end of file diff --git a/test/files/neg/t4541b.scala b/test/files/neg/t4541b.scala new file mode 100644 index 0000000000..7a21ffc156 --- /dev/null +++ b/test/files/neg/t4541b.scala @@ -0,0 +1,16 @@ + + + + + +@SerialVersionUID(1L) +final class SparseArray[@specialized(Int) T](private var data: Array[T]) extends Serializable { + def use(inData: Array[T]) = { + data = inData; + } + + def set(that: SparseArray[T]) = { + use(that.data.clone) + } +} + |