summaryrefslogtreecommitdiff
path: root/test/files
Commit message (Collapse)AuthorAgeFilesLines
* Merge pull request #5543 from retronym/ticket/10069Lukas Rytz2016-12-122-0/+47
|\ | | | | SI-10069 Fix code gen errors with array updates, Nothing
| * SI-10069 Fix code gen errors with array updates, NothingJason Zaugg2016-12-022-0/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Crashes in ASM or VerifyErrors used to occur when assigning an expression of type Nothing to an element of a primitive array. This commit adapts the RHS of the assignment to the element type to correct this. `adapt` contains logic to insert an `ATHROW` of the slot of type `Nothing$`, which makes everything line up. The subsequent array stores become dead code and are dropped later on in code gen, so the test case compiles to: public void foo0(double[]); Code: 0: bipush 42 2: istore_2 3: aload_1 4: iconst_0 5: aload_0 6: invokevirtual #30 // Method throwExpected:()Lscala/runtime/Nothing$; 9: athrow I found a similar bug in the emission of primitive unboxing and fixed that too.
* | Merge pull request #5550 from retronym/ticket/3772Lukas Rytz2016-12-126-20/+48
|\ \ | | | | | | SI-3772 Fix detection of term-owned companions
| * | SI-3772 Fix detection of term-owned companionsJason Zaugg2016-11-296-20/+48
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Companion detection consults the scopes of enclosing Contexts during typechecking to avoid the cycles that would ensue if we had to look at into the info of enclosing class symbols. For example, this used to typecheck: object CC { val outer = 42 } if ("".isEmpty) { case class CC(c: Int) CC.outer } This logic was not suitably hardened to find companions in exactly the same nesting level. After fixing this problem, a similar problem in `Namer::inCurrentScope` could be solved to be more selective about synthesizing a companion object. In particular, if a manually defined companion trails after the case class, don't create an addiotional synthetic comanpanion object.
* | Merge pull request #5570 from adriaanm/t10075Adriaan Moors2016-12-055-2/+157
|\ \ | | | | | | SI-10075 propagate annotations to lazy val's underlying field
| * | Drop annotations from trait static super accessorAdriaan Moors2016-12-051-2/+2
| | | | | | | | | | | | | | | | | | Based on review suggestion by retronym. See also scala/scala-dev#213
| * | SI-10075 annotations go to lazy val's underlying fieldAdriaan Moors2016-12-054-0/+155
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This likely regressed in #5294. Review feedback from retronym: - Tie annotation triaging a bit closer together durban kindly provided initial version of test/files/run/t10075.scala And pointed out you must force `lazy val`, since `null`-valued field is serializable regardless of its type. Test test/files/run/t10075b courtesy of retronym
* | | Revert existential infer part of #5376Adriaan Moors2016-12-012-13/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It wasn't a good idea after all. Also removed some tracing code that I cannot imagine was ever used in a production compiler. It's still just a recompile away. Fixes scala/scala-dev#280
* | | Merge pull request #5284 from milessabin/topic/si-7046Adriaan Moors2016-11-3012-0/+175
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SI-7046 reflection doesn't see all knownDirectSubclasses This appears to do the right thing in the most typical scenarios in which `knownDirectSubclasses` would be used. The missing 5% is that subclasses defined in local scopes might not be seen by `knownDirectSubclasses` (see `Local` and `Riddle` in the test below). In mitigation, though, it is almost certain that a local subclass would represent an error in any scenario where `knownDirectSubclasses` might be used. Errors for such situations are reported by recording (via a symbol attachment) that `knownDirectSubclasses` has been called and reporting an error if any additional children are added subsequently. Despite these limitations and caveats, I believe that this represents a huge improvement over the status quo, and would eliminate 100% of the failures that I've seen in practice with people using shapeless for type class derivation.
| * | | Partial fix for SI-7046Miles Sabin2016-11-2812-0/+175
| | | |
* | | | Merge pull request #5376 from milessabin/topic/clean-experimentalAdriaan Moors2016-11-303-1/+8
|\ \ \ \ | |_|/ / |/| | | Clean up of code guarded by bare -Xexperimental
| * | | Typevar experimentals now default; t5729 pos -> neg.Miles Sabin2016-11-282-0/+7
| | | |
| * | | Pattern matching virtualization now guarded by -Yvirtpatmat.Miles Sabin2016-11-281-1/+1
| |/ /
* | | Merge pull request #5562 from retronym/ticket/SD-275Jason Zaugg2016-11-305-0/+111
|\ \ \ | | | | | | | | SD-275 Further harden against refs to absentee classes
| * | | SD-275 Further harden against refs to absentee classesJason Zaugg2016-11-295-0/+111
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Limit the strategy of unpickling an external reference to a module class to a lookup of the module var to non-stub owners in order to enable fall through to stub symbol creation. Fixes scala/scala-dev#275
* | | | Merge pull request #5554 from retronym/ticket/10009Adriaan Moors2016-11-292-0/+34
|\ \ \ \ | | | | | | | | | | SI-10009 Fields survive untypecheck/retypecheck
| * | | | SI-10009 Fields survive untypecheck/retypecheckJason Zaugg2016-11-282-0/+34
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some places in the compiler, and many places in macros, use `untypecheck` (aka `resetAttrs`) to strip types and local symbols from a tree before retypechecking it under some different context. The refactoring of the desugaring of vals and vars in Scala 2.12.0 broke an assumption in this facility. When a ValDef must be split into multiple members (e.g. a field and a getter, or a perhaps also a setter), the ValDef that was parsed assumes the role of the `field`, and the trees for other members are stached by `Namer` to the `synthetics` map of the compilation unit, in order to spliced into the right statement list by typechecking. See `enterGetterSetter` for more details. However, the parsed ValDef is now used verbatim, carrying the meaning (ie, the symbol) of the `private[this]` field. This tree now had an inconsistency between the flags in `tree.mods.flags` and `tree.symbol.flags`. `tree.name` also differed from `tree.symbol.name` (the latter was renamed to be a local name, ie one with a trailing space.) When `ResetAttrs` stripped off the symbol and we retypechecked, we'd end up with two symbols in scope with the same name. In the first from the `run` test: ``` ================================================================================ { class a extends scala.AnyRef { def <init>(): a = { a.super.<init>(); () }; private[this] val x: Int = 42; <stable> <accessor> def x: Int = a.this.x }; new a() } { class a extends scala.AnyRef { def <init>() = { super.<init>(); () }; val x = 42; // oops, the name is "x" rather than "x " and we've missing `private[this]`! <stable> <accessor> def x: Int = a.this.x }; new a() } scala.tools.reflect.ToolBoxError: reflective typecheck has failed: x is already defined as value x ``` This commit uses the flags and name of the symbol in `typedValDef`. I've also had to modify the internals of `CodePrinter` to use the implicit, override, and deferred flags from the modifiers of an accessor when recovering pre-typer tree for a ValDef.
* | | | Merge pull request #5536 from retronym/ticket/SD-268Adriaan Moors2016-11-291-0/+17
|\ \ \ \ | | | | | | | | | | Fix more compiler crashes with fields, refinement types
| * | | | Fix more compiler crashes with fields, refinement typesJason Zaugg2016-11-211-0/+17
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the same manner as scala/scala-dev#219, the placement of the fields phase after uncurry is presenting some challenges in keeping our trees type correct. This commit whacks a few more moles by adding a casts in the body of synthetic methods. Fixes scala/scala-dev#268
* | | | Merge pull request #5506 from retronym/topic/existential-idsAdriaan Moors2016-11-295-11/+11
|\ \ \ \ | |_|/ / |/| | | Avoid name table pollution with fresh existentials
| * | | Avoid name table pollution with fresh existentialsJason Zaugg2016-11-085-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During large compilations runs, the large numbers of globally unique fresh names for existentials captured from prefixes of `asSeenFrom`. is a) somewhat wasteful (all these names are interned in the name table) , and, b) form a pathological case for the current implementation of `Names#hashValue`, which leads to overfull hash-buckets in the name table. `hashValue` should probably be improved, but my attempts to do so have shown a small performance degradation in some benchmarks. So this commit starts by being more frugal with these names, only uniquely naming within an `asSeenFrom` operation. References scala/scala-dev#246
* | | | Merge pull request #5544 from retronym/ticket/8779Jason Zaugg2016-11-293-3/+41
|\ \ \ \ | | | | | | | | | | SI-8779 Enable inlining of code within a REPL session
| * | | | Support inlining under -Yrepl-class-based REPLJason Zaugg2016-11-283-9/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By marking the wrapper classes as sealed, the inliner will be able to assume finality of defs introduces in the REPL without requiring the user to mark them as `final`, which is an odd thing to do in single line of REPL input.
| * | | | SI-8779 Enable inlining of code within a REPL sessionJason Zaugg2016-11-282-0/+27
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The REPL has a long running instance of Global which outputs classfiles by default to a VirtualDirectory. The inliner did not find any of these class files when compiling calls to methods defined in previous runs (ie, previous lines of input.) This commit: - Adds a hook to augment the classpath that the optimizer searches, and uses this in the REPL to add the output directory - Fixes the implementation of `findClassFile` in VirtualDirectory, which doesn't seem to have been used in anger before. I've factored out some common code into a new method on `AbstractFile`. - Fixes a similar problem getSubDir reported by Li Haoyi - Adds missing unit test coverage. This also fixes a bug in REPL autocompletion for types defined in packages >= 2 level deep (with the `:paste -raw` command). I've added a test for this case.
* | | | Merge pull request #5529 from lrytz/sd259Jason Zaugg2016-11-291-2/+4
|\ \ \ \ | |/ / / |/| | | Better inliner support for 2.12 trait encoding
| * | | Better inliner support for 2.12 trait encodingLukas Rytz2016-11-251-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some changes to the trait encoding came late in the 2.12 cycle, and the inliner was not adapted to support it in the best possible way. In 2.12.0 concrete trait methods are encoded as interface T { default int m() { return 1 } static int m$(T $this) { <invokespecial $this.m()> } } class C implements T { public int m() { return T.m$(this) } } If a trait method is selected for inlining, the 2.12.0 inliner would copy its body into the static super accessor `T.m$`, and from there into the mixin forwarder `C.m`. This commit special-cases the inliner: - We don't inline into static super accessors and mixin forwarders. - Insted, when inlining an invocation of a mixin forwarder, the inliner also follows through the two forwarders and inlines the trait method body. There was a difficulty implementing this: inlining the static static super accessor would copy an `invokespecial` instruction into a different classfile, which is not legal / may change semantics. That `invokespecial` is supposed to disappear when inlining the actual default method body. However, this last step may fail, for example because the trait method body itself contains instructions that are not legal in a different classfile. It is very difficult to perform all necessary checks ahead of time. So instead, this commit implements the ability to speculatively inline a callsite and roll back if necessary. The commit also cleans up the implementation of inliner warnings a little. The previous code would always emit a warning when a method annotated `@inline` was not picked by the heuristics - this was a problem when the callsite in the static super accessor was no longer chosen.
* | | | Merge pull request #5556 from dragos/ticket/10071Iulian Dragos2016-11-256-0/+42
|\ \ \ \ | |/ / / |/| | | SI-10071 Separate compilation for varargs methods
| * | | SI-10071 Separate compilation for varargs methodsIulian Dragos2016-11-256-0/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure that methods annotated with varargs are properly mixed-in. This commit splits the transformation into an info transformer (that works on all symbols, whether they come from source or binary) and a tree transformer. The gist of this is that the symbol-creation part of the code was moved to the UnCurry info transformer, while tree operations remained in the tree transformer. The newly created symbol is attached to the original method so that the tree transformer can still retrieve the symbol. A few fall outs: - I removed a local map that was identical to TypeParamsVarargsAttachment - moved the said attachment to StdAttachments so it’s visible between reflect.internal and nsc.transform - a couple more comments in UnCurry to honour the boy-scout rule
* | | | Merge pull request #5540 from retronym/ticket/9814Lukas Rytz2016-11-251-0/+28
|\ \ \ \ | |/ / / |/| | | SI-9814 Fix synchronized in specialized overrides
| * | | SI-9814 Fix synchronized in specialized overridesJason Zaugg2016-11-251-0/+28
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Specialization creates a subclasses of a specializd class for each type parameter combination. These contains copies of the methods from the superclass. However, before this transform, the pattern of self-synchronization in a method body had been replace by flag Flag.SYNCHRONIZED on the method symbol. This was not being propagated to the override, and hence no locking occured. This commit modifies the creation of the specialized overload symbol to copy the SYNCHRONIZED flag, as was already done for ASBOVERRIDE. I have also done the same for the `@strictfp` annotation.
* | | Merge pull request #5480 from SethTisue/remove-reflection-mem-typecheck-testSeth Tisue2016-11-231-28/+0
|\ \ \ | |/ / |/| | SI-6412 remove flaky test
| * | SI-6412 remove flaky testSeth Tisue2016-10-261-28/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | I have repeatedly seen this fail CI runs, including recently as the comment in the test itself says: "I'm not sure this is a great way to test for memory leaks, since we're also testing how good the JVM's GC is, and this is not easily reproduced between machines/over time"
* | | Merge pull request #5449 from som-snytt/issue/9953Lukas Rytz2016-11-163-0/+20
|\ \ \ | | | | | | | | SI-9953 Any Any aborts warn on equals
| * | | SI-9953 Any Any aborts warn on equalsSom Snytt2016-10-073-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Don't warn about equals if any `Any` is involved. cf SI-8965 The condition for warning is that both types lub to a supertype of Object.
* | | | Merge pull request #5440 from som-snytt/issue/9944Lukas Rytz2016-11-162-0/+19
|\ \ \ \ | | | | | | | | | | SI-9944 Scan after interp expr keeps CR
| * | | | SI-9944 Scan after interp expr keeps CRSom Snytt2016-10-012-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In an interpolated expression `s"""${ e }"""`, the scanner advances input past the RBRACE. If a multiline string as shown, get the next raw char, because CR is significant.
* | | | | Merge pull request #5533 from som-snytt/issue/broken-9915Seth Tisue2016-11-161-1/+3
|\ \ \ \ \ | | | | | | | | | | | | SI-9915 Fix test on windows
| * | | | | SI-9915 Fix test on windowsSom Snytt2016-11-161-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use `javac: -encoding UTF-8` tool args comment so javac uses correct source encoding.
* | | | | | Merge pull request #5534 from lrytz/t10059Lukas Rytz2016-11-162-0/+12
|\ \ \ \ \ \ | |/ / / / / |/| | | | | SI-10059 reset the `DEFERRED` flag for Java varargs forwarders
| * | | | | SI-10059 reset the `DEFERRED` flag for Java varargs forwardersLukas Rytz2016-11-162-0/+12
| | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When an abstract method is annotated `@varargs`, make sure that the generated synthetic Java varargs method does not have the `DEFERRED` flag (`ACC_ABSTRACT` in bytecode). The flag lead to an NPE in the code generator, because the ASM framework leaves certain fields `null` for abstract methods (`localVariables` in this case). Interestingly this did not crash in 2.11.x: the reason is that the test whether to emit a method body or not has changed in the 2.12 backend (in c8e6050). val isAbstractMethod = [..] methSymbol.isDeferred [..] // 2.11 val isAbstractMethod = rhs == EmptyTree // 2.12 So in 2.11, the varargs forwarder method was actually left abstract in bytecode, leading to an `AbstractMethodError: T.m([I)I` at run-time.
* | | | | Merge pull request #5384 from som-snytt/issue/9915Seth Tisue2016-11-142-0/+30
|\ \ \ \ \ | | | | | | | | | | | | SI-9915 Utf8_info are modified UTF8
| * | | | | SI-9915 Utf8_info are modified UTF8Som Snytt2016-10-202-0/+30
| | |_|/ / | |/| | | | | | | | | | | | | | | | | | | | | | | Use DataInputStream.readUTF to read CONSTANT_Utf8_info. This fixes reading embedded null char and supplementary chars.
* | | | | SI-8433 SI-9689 Progressive testsSom Snytt2016-11-125-0/+82
| | | | | | | | | | | | | | | | | | | | Because no one votes against a progressive test.
* | | | | Typo and spelling correctionsJanek Bogucki2016-11-111-1/+1
| | | | |
* | | | | Merge pull request #5335 from rumoku/SI-9888Jason Zaugg2016-11-112-8/+8
|\ \ \ \ \ | | | | | | | | | | | | SI-9888. Prevent OOM on ParRange. Improve toString.
| * | | | | SI-9888. Prevent OOM on ParRange. Improve toString.Vladimir Glushak2016-10-022-8/+8
| | | | | |
* | | | | | Merge pull request #5460 from som-snytt/issue/6978Jason Zaugg2016-11-103-0/+13
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-6978 No linting of Java parens
| * | | | | | SI-6978 No linting of Java parensSom Snytt2016-10-153-0/+13
| | |/ / / / | |/| | | | | | | | | | | | | | | | | | | | | | Don't lint overriding of nullary by non-nullary when non-nullary is Java-defined. They can't help it.
* | | | | | Merge pull request #5486 from som-snytt/issue/6734-synthsJason Zaugg2016-11-101-0/+17
|\ \ \ \ \ \ | | | | | | | | | | | | | | SI-6734 Synthesize companion near case class
| * | | | | | SI-6734 CommentSom Snytt2016-10-311-15/+9
| | | | | | |