summaryrefslogtreecommitdiff
path: root/test/files
Commit message (Collapse)AuthorAgeFilesLines
* Merge branch '2.11.x' into 2.12.xLukas Rytz2014-05-2227-14/+346
|\
| * Upgrade ASM to 5.0.2Lukas Rytz2014-05-203-7/+37
| | | | | | | | | | | | | | | | | | | | | | | | | | This commit is a squashed version of all commits in PR #3747. For future upgrades, consult the README and check the commits in https://github.com/scala/scala/pull/3747/commits There's one bug in ASM 5.0.2 that breaks scalac: http://forge.ow2.org/tracker/?func=detail&aid=317200&group_id=23&atid=100023 This bug is fixed in ASM trunk, the patch has been merged into this commit. A future upgrade of ASM should contain the fix.
| * SI-8601 Test that static LOAD_FIELD is not eliminatedJason Zaugg2014-05-204-0/+21
| | | | | | | | | | This test fails under 2.11.0, and works now that DCE treats static loads as useful instructions.
| * SI-8601 Test that `null.synchronized` NPEs under -optimizeJason Zaugg2014-05-192-0/+9
| | | | | | | | As part of my sweep through the side-effecting byte code instructions.
| * SI-8601 Don't treat newarray as dead codeJason Zaugg2014-05-191-0/+3
| | | | | | | | Otherwise we lose the side effect of a `NegativeArraySizeException`.
| * Add a test for array loadJason Zaugg2014-05-191-1/+3
| |
| * SI-8601 Avoid over-eager optimization of LOAD_FIELDJason Zaugg2014-05-194-0/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It can NPE or trigger static class initilization, we can't elimiate it without changing semantics. To make sure we don't thwart closure elimination, I've allowed DCE to eliminate a non-static LOAD_FIELD of a member of a closure class. It would be more general to track nullity of the reciever (e.g, `this` or `new Foo` cannot be null), but that would require more infrastructure in this phase. I've added a test for closure inlining based on a a suggestion by @dragos. This actually passes if we remove the (LOAD_FIELD, DROP) peephole optimization for `closelim` altogether. But I chose to adapt that optimization (only allow it for non-static, closure fields), rather then remove it alogether, in the interests of treading lightly.
| * SI-8601 Don't treat int/long division, or arraylength, as dead-codeJason Zaugg2014-05-194-0/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `{i, l}div` and `{i, l}rem` throw an `ArithmeticException` if the divisor is 0. `arraylength` throws a `NullPointerException` on a null reference. JVM Spec: > The only integer operations that can throw an exception are the > integer divide instructions (idiv and ldiv) and the integer > remainder instructions (irem and lrem), which throw an > ArithmeticException if the divisor is zero. > The Java virtual machine's floating-point operators do not throw > runtime exceptions > If the arrayref is null, the arraylength instruction throws a > NullPointerException. I checked the other primitives in `ICode` to see if anything else should be considered as live code. Pure: // jvm : {i, l, f, d}neg case class Negation(kind: TypeKind) extends Primitive // jvm : if{eq, ne, lt, ge, le, gt}, if{null, nonnull} // if_icmp{eq, ne, lt, ge, le, gt}, if_acmp{eq,ne} case class Test(op: TestOp, kind: TypeKind, zero: Boolean) extends Primitive // jvm : lcmp, {f, d}cmp{l, g} case class Comparison(op: ComparisonOp, kind: TypeKind) extends Primitive Impure: {i, l}{div, rem}, otherwise pure // jvm : {i, l, f, d}{add, sub, mul, div, rem} case class Arithmetic(op: ArithmeticOp, kind: TypeKind) extends Primitive Pure (overflow is silent, NaN.toInt is defined): // jvm : {i, l}{and, or, xor} case class Logical(op: LogicalOp, kind: TypeKind) extends Primitive // jvm : {i, l}{shl, ushl, shr} case class Shift(op: ShiftOp, kind: TypeKind) extends Primitive // jvm : i2{l, f, d}, l2{i, f, d}, f2{i, l, d}, d2{i, l, f}, i2{b, c, s} case class Conversion(src: TypeKind, dst: TypeKind) extends Primitive Impure! May NPE! // jvm : arraylength case class ArrayLength(kind: TypeKind) extends Primitive Pure (we know that StringBuilder.{<init>, append, toString} are pure and `append` is null safe.) // jvm : It should call the appropiate 'append' method on StringBuffer case class StringConcat(el: TypeKind) extends Primitive // jvm: it should create a new StringBuffer case object StartConcat extends Primitive // jvm: convert StringBuffer to a String case object EndConcat extends Primitive
| * Revert "SI-8601 Don't treat int/long division, or arraylength, as dead-code"Adriaan Moors2014-05-194-26/+0
| | | | | | | | This reverts commit ee611cd76c29fedd416162e482c7ab3f15b831ca.
| * Revert "SI-8601 Avoid over-eager optimization of LOAD_FIELD"Adriaan Moors2014-05-192-13/+0
| | | | | | | | This reverts commit 0b432f9cd22b6e9770852e5b331a15f0534a312c.
| * Revert "Add a test for array load"Adriaan Moors2014-05-191-3/+1
| | | | | | | | This reverts commit 99b4ef8d8472f154d73160f5fe72daf081abb24e.
| * Revert "SI-8601 Don't treat newarray as dead code"Adriaan Moors2014-05-191-3/+0
| | | | | | | | This reverts commit 70b912a87433c9589af33e4f8b33dca39abb66e5.
| * Revert "SI-8601 Test that `null.synchronized` NPEs under -optimize"Adriaan Moors2014-05-192-9/+0
| | | | | | | | This reverts commit dcade51d751b389fb5137040f7e1006b4bc633c6.
| * SI-8601 Test that `null.synchronized` NPEs under -optimizeJason Zaugg2014-05-182-0/+9
| | | | | | | | As part of my sweep through the side-effecting byte code instructions.
| * SI-8601 Don't treat newarray as dead codeJason Zaugg2014-05-181-0/+3
| | | | | | | | Otherwise we lose the side effect of a `NegativeArraySizeException`.
| * Add a test for array loadJason Zaugg2014-05-181-1/+3
| |
| * SI-8601 Avoid over-eager optimization of LOAD_FIELDJason Zaugg2014-05-182-0/+13
| | | | | | | | | | It can NPE or trigger static class initilization, we can't elimiate it without changing semantics.
| * SI-8601 Don't treat int/long division, or arraylength, as dead-codeJason Zaugg2014-05-184-0/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `{i, l}div` and `{i, l}rem` throw an `ArithmeticException` if the divisor is 0. `arraylength` throws a `NullPointerException` on a null reference. JVM Spec: > The only integer operations that can throw an exception are the > integer divide instructions (idiv and ldiv) and the integer > remainder instructions (irem and lrem), which throw an > ArithmeticException if the divisor is zero. > The Java virtual machine's floating-point operators do not throw > runtime exceptions > If the arrayref is null, the arraylength instruction throws a > NullPointerException. I checked the other primitives in `ICode` to see if anything else should be considered as live code. Pure: // jvm : {i, l, f, d}neg case class Negation(kind: TypeKind) extends Primitive // jvm : if{eq, ne, lt, ge, le, gt}, if{null, nonnull} // if_icmp{eq, ne, lt, ge, le, gt}, if_acmp{eq,ne} case class Test(op: TestOp, kind: TypeKind, zero: Boolean) extends Primitive // jvm : lcmp, {f, d}cmp{l, g} case class Comparison(op: ComparisonOp, kind: TypeKind) extends Primitive Impure: {i, l}{div, rem}, otherwise pure // jvm : {i, l, f, d}{add, sub, mul, div, rem} case class Arithmetic(op: ArithmeticOp, kind: TypeKind) extends Primitive Pure (overflow is silent, NaN.toInt is defined): // jvm : {i, l}{and, or, xor} case class Logical(op: LogicalOp, kind: TypeKind) extends Primitive // jvm : {i, l}{shl, ushl, shr} case class Shift(op: ShiftOp, kind: TypeKind) extends Primitive // jvm : i2{l, f, d}, l2{i, f, d}, f2{i, l, d}, d2{i, l, f}, i2{b, c, s} case class Conversion(src: TypeKind, dst: TypeKind) extends Primitive Impure! May NPE! // jvm : arraylength case class ArrayLength(kind: TypeKind) extends Primitive Pure (we know that StringBuilder.{<init>, append, toString} are pure and `append` is null safe.) // jvm : It should call the appropiate 'append' method on StringBuffer case class StringConcat(el: TypeKind) extends Primitive // jvm: it should create a new StringBuffer case object StartConcat extends Primitive // jvm: convert StringBuffer to a String case object EndConcat extends Primitive
| * Merge pull request #3738 from retronym/ticket/8574Jason Zaugg2014-05-172-7/+28
| |\ | | | | | | SI-8574 Copy @SerialVersionUID, etc, to specialized subclasses
| | * SI-8574 Copy @SerialVersionUID, etc, to specialized subclassesJason Zaugg2014-05-162-7/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The test case demonstrates that this is important for serialization and for strictfp. (Although the latter is still pretty broken, see SI-7954.) Now that the synthetic subclass of `Tuple2[Int, Int]` also has the `@deprecatedInheritance` annotation, I had to change the spot that issues this warning to be silent after the typer phase. Otherwise, we get two warnings in `run/t3888.scala`. This also remedies double warnings that were incurred in `neg/t6162-inheritance`.
| * | Move t8582 to test/files/jvmLukas Rytz2014-05-132-0/+0
| | |
| * | SI-8582 emit InnerClasses attribute in GenBCodeLukas Rytz2014-05-132-5/+112
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I removed the `-bcode` test since we have a build that passes `-Ybackend:GenBCode` to all tests. Short intro do the [`InnerClass` attribute][1]: - A class needs one `InnerClass` attribute for each of its nested classes - A class needs the `InnerClass` attribute for all (nested) classes that are mentioned in its constant pool The attribute for a nested class `A$B$C` consists of the long name of the outer class `A$B`, the short name of the inner class `C`, and an access flag set describig the visibility. The attribute seems to be used for reflection. [1]: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.6
| * | Fix BeanInfo generation for GenBCodeLukas Rytz2014-05-133-0/+32
| | |
| * | SI-8582 Pending test for InnerClasses bug in GenBCodeJason Zaugg2014-05-122-0/+18
| | | | | | | | | | | | | | | As seen in a runtime reflection failure in Slick during a GenBCode enabled run of our beloved Community Build.
| * | SI-8578 Avoid fresh name clashes under -Ydelambdafy:methodJason Zaugg2014-05-112-0/+19
| | | | | | | | | | | | | | | It is important to append the fresh 'N' after '$'. Otherwise, we find out the hard way that ("foo$11" + "1") == ("foo$1" + "11").
* | | Deprecation of @BeanInfoLukas Rytz2014-05-133-0/+9
|/ /
* / SI-8576 Temporarily disable part of serialization testJason Zaugg2014-05-101-23/+34
|/ | | | | | | | | | | | | | | | | Parts of this test fail if testing a library built with -Xcheckinit. The failures seem to be in two categories: - A component of the serialized structure does not have a declared SerialVersionUID, meaning that the extra field added to track initialization results in a different ID. This manifests as a `java.io.InvalidClassException` when deserializing the blobs of data saved in the test case. - Spurious `UnitializedFieldErrors` when calling methods on the object that has been serialized and then deserialized. Until we figure out the right course of action (more @SerialVersionUID annotations / weaker tests / ...), this commit disabled those tests.
* Merge pull request #3730 from lrytz/checkinitJason Zaugg2014-05-099-3/+33
|\ | | | | Fix checkinit build
| * Disable run/t7974 under checkinitLukas Rytz2014-05-092-1/+2
| |
| * SI-8570 set the checkinit bit for unit-typed fields of traitsLukas Rytz2014-05-095-0/+27
| | | | | | | | Fix only, refactoring in subsequent commit.
| * Fix run/t5256h.scala under checkinitLukas Rytz2014-05-081-1/+2
| |
| * Fix run/t3569.scala under checkinitLukas Rytz2014-05-081-1/+2
| |
* | Merge origin/master into topic/master-to-2.11.x-2Jason Zaugg2014-05-094-0/+46
|\ \
| * | Revert "SI-5905 Clarify test case"Jason Zaugg2014-05-092-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 78bd175afcc89878ca1c00cce69d0517909c6ff3. See discussion: https://github.com/scala/scala/pull/3597#commitcomment-6270375
| * | Merge pull request #3597 from som-snytt/issue/5905-feature-helpJason Zaugg2014-05-093-0/+47
| |\ \ | | | | | | | | SI-5905 Sanity check -language options
| | * | SI-5905 Clarify test caseSom Snytt2014-05-082-4/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The language feature options are discovered reflectively, but it is nice to enforce that expected options are supplied. Short of that, the code string includes a rowdy postfix operator. It still does enforce that at least one option was discovered. Delete -nowarn flags file. Let's see if that was to suppress a warning in the standard build.
| | * | SI-5905 Restore -language:_Som Snytt2014-03-021-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Underscore means all. -x:c,b,a,_ results in value c,b,a,a,b,c,d,... Currently, -Xprint does not present phases as a closed set of choices; there is ad hoc checking in Global. That would be a nice unification. (You don't know the list of choices until after global is constructed.)
| | * | SI-5905 Sanity check -language optionsSom Snytt2014-02-284-0/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The option names are hardcoded, but checked by a test. There are no hooks to verify options after the compiler is constructed. Introduced a `MultiChoiceSetting` required for the setting creation framework.
* | | | Merge pull request #3719 from retronym/ticket/8546Jason Zaugg2014-05-094-3/+51
|\ \ \ \ | | | | | | | | | | SI-8546 Pattern matcher analysis foiled by over-widening
| * | | | SI-8546 Pattern matcher analysis foiled by over-wideningJason Zaugg2014-05-074-3/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the enclosed test, the prefix checkable type `ModuleTypeRef(F2.this, C)` was being inadvertently widened to `ModuleTypeRef(F2[?], C)`. This started after some misguided future-proofing in SI-6771 / 3009916. This commit changes the `dealiasWiden` to a `delias`.
* | | | | Merge pull request #3727 from retronym/ticket/8531Jason Zaugg2014-05-092-0/+29
|\ \ \ \ \ | | | | | | | | | | | | SI-8531 Better space efficiency for patmat analysis
| * | | | | SI-8531 Better space efficiency for patmat analysisJason Zaugg2014-05-082-0/+29
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | By adding logging to `clause`, I found that the majority of calls provide 0 or 1 elements. In SI-7020 / 69557da55, we changed this method to use a `LinkedHashSet` to have deterministic results for clauses with more elements. But I suspect that this contributes to higher memory usage from the pattern matcher. The enclosed test case, carefully whittled down by @oxbowlakes, used to consume an inordinate amount of memory and time. After this patch, it is back to 2.10.4 performance. I have run `neg/t7020.scala` in a loop and it still is deterministic.
* | | | | Merge pull request #3729 from retronym/merge/master-to-2.11.xAdriaan Moors2014-05-0918-0/+297
|\ \ \ \ \ | | | | | | | | | | | | Merge master to 2.11.x
| * \ \ \ \ Merge commit 'b5392a0' into merge/master-to-2.11.xJason Zaugg2014-05-0918-0/+297
| |\ \ \ \ \ | | | |/ / / | | |/| | |
| | * | | | Merge pull request #3689 from xeno-by/ticket/8523Jason Zaugg2014-05-082-0/+11
| | |\ \ \ \ | | | | | | | | | | | | | | makes bundles friendly to -Ywarn-dead-code
| | | * | | | makes bundles friendly to -Ywarn-dead-codeEugene Burmako2014-04-212-0/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently, the `new Bundle(???).impl` synthetic tree generated as a macro impl ref for bundles evokes -Ywarn-dead-code warnings. This pull requests changes `???` to `null` in order not to stress out the checker. What's in the argument doesn't actually make any difference anyway.
| | * | | | | Merge pull request #3711 from retronym/ticket/8549-2Jason Zaugg2014-05-087-0/+220
| | |\ \ \ \ \ | | | | | | | | | | | | | | | | SI-8549 Serialization: fix regression with @SerialVersionUID / start enforcing backwards compatibility
| | | * | | | | SI-6988 Test case for non-literal / non-constant SerialVersionUIDJason Zaugg2014-05-054-0/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `neg` test was already working since `SerialVersionUID` was changed to a `ClassFileAnnotation`; the `run` test only started working since the recently preceding commit that made a compensatory test in the backend.
| | | * | | | | SI-8549 Enforce serialization stability for selected collectionsJason Zaugg2014-05-052-0/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To date, we've been hesidant to offer any guarantees about Java serialization of standard library types among heteregenous Scala versions. Nonetheless, we have added `SerialVersionUID` annotations to parts of the standard library, to offer some stability. This protects against two winds of change: automatic calculation of this UID might differ between JVM versions, or it might differ due to otherwise immaterial changes to the library in Scala releases. With this commit, we strengthen the guarantees. Classes marked with `SerialVersionUID` will be serialization compatible within minor releases of Scala. This is backed up by the enclosed test. After major releases, we reserve the right to break this. But the test will serve to avoid *accidental* changes. Specifically, the test case checks: - deserialize(serialize(x)) == x - serialize(x) is stable over time I have included values of all types marked with `@SerialVersionUID` in the library. For some types, I've added variations in the values to exercise different subclasses, such as `Set1` / `Set2`. This found that that the serialized form of predefined `ClassTags` included the cached identity hash code and failed the stability test. This wasn't an issue for correctness as they also provide `readResolve`, but I marked those fields as `@transient` in any case to comply with the test expectations. That whole area is good example of a serialization worst-practice: using anonymous classes in code like: val Object: Manifest[java.lang.Object] = new PhantomManifest[...](...) { private def readResolve(): Any = Manifest.AnyVal } ... will lead to instability if these declarations are shifted around in the file. Named classes would be preferred. I've noted this in a TODO comment for 2.12.
| | | * | | | | SI-8549 Honour the @SerialVersionUID annotatationJason Zaugg2014-05-051-0/+16
| | | | |/ / / | | | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In PR #1673 / 4267444, the annotation `SerialVersionId` was changed from a `StaticAnnotation` to `ClassFileAnnotation` in order to avoid silently ignoring non-literal UIDs like: @SerialVersionUID(0 - 12345L) class C And to flag non-constant UIDs: @SerialVersionUID("!!!".length) While this indeed was fold constants, the change was incomplete. The compiler API for reading the argument from a `ClassFileAnnoation` is different, on must look for a `LiteralAnnotArg`, rather than a `Literal`. This commit: - amends the backend accordingly - removes relevant duplication between `GenASM` and `GenBCode` - tests that the static field is generated accordingly This will mean that we will break deserialization of objects from Scalal 2.11.0 that use this annotation.