diff options
Diffstat (limited to 'sources/scalac/typechecker/Analyzer.java')
-rw-r--r-- | sources/scalac/typechecker/Analyzer.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index c4b404cc9a..b4b9d078d0 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -133,7 +133,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { // expressions may be packages and // Java statics modules. - static final int SUPERmode = 0x080; // orthogonal to above. When set + static final int SUPERmode = 0x080; // Goes with CONSTRmode. When set // we are checking a superclass // constructor invocation. @@ -192,6 +192,11 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { if (!isAccessible(sym, site)) { error(pos, sym + " cannot be accessed in " + site.type); } + if (site instanceof Tree.Super && (sym.flags & DEFERRED) != 0) { + Symbol sym1 = context.enclClass.owner.thisSym().info().lookup(sym.name); + if ((sym1.flags & OVERRIDE) == 0 || (sym1.flags & DEFERRED) != 0) + error(pos, "symbol accessed from super may not be abstract"); + } } /** Is `sym' accessible as a member of tree `site' in current context? |