aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-07 15:10:25 +0100
committerMartin Odersky <odersky@gmail.com>2016-03-12 16:08:37 +0100
commitd822b1e965aa808d706b859ce90ed4dc08df8d94 (patch)
tree70c1168caa0faed3be91e02509250e9df4c679da /src
parent294d21ff6168f1402efc04a52f8d26deaed31c2c (diff)
downloaddotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.tar.gz
dotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.tar.bz2
dotty-d822b1e965aa808d706b859ce90ed4dc08df8d94.zip
Add @volatile when rewriting lazy vals from Scala2.
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/transform/LazyVals.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/LazyVals.scala b/src/dotty/tools/dotc/transform/LazyVals.scala
index 25b9afa68..88d55c576 100644
--- a/src/dotty/tools/dotc/transform/LazyVals.scala
+++ b/src/dotty/tools/dotc/transform/LazyVals.scala
@@ -12,7 +12,10 @@ import Symbols._
import Decorators._
import NameOps._
import StdNames.nme
+import rewrite.Rewrites.patch
+import util.Positions.Position
import dotty.tools.dotc.transform.TreeTransforms.{TransformerInfo, TreeTransformer, MiniPhaseTransform}
+import dotty.tools.dotc.ast.NavigateAST._
import dotty.tools.dotc.ast.Trees._
import dotty.tools.dotc.ast.{untpd, tpd}
import dotty.tools.dotc.core.Constants.Constant
@@ -65,11 +68,14 @@ class LazyVals extends MiniPhaseTransform with IdentityDenotTransformer with Nee
val sym = tree.symbol
if (!(sym is Flags.Lazy) || sym.owner.is(Flags.Trait) || (sym.isStatic && sym.is(Flags.Module))) tree
else {
-
val isField = sym.owner.isClass
-
if (isField) {
if (sym.isVolatile ||
+ ctx.scala2Mode && {
+ if (ctx.settings.rewrite.value.isDefined)
+ patch(ctx.compilationUnit.source, Position(toUntyped(tree).envelope.start), "@volatile ")
+ true // cannot assume volatile because of problems with compilestdlib. See #1149
+ } ||
(sym.is(Flags.Module) && !sym.is(Flags.Synthetic)))
// module class is user-defined.
// Should be threadsafe, to mimic safety guaranteed by global object