Skip to content

Commit 19b7386

Browse files
committed
Warn nopos & tests/init refactor for warn tests
1 parent 69cc6b1 commit 19b7386

File tree

153 files changed

+199
-195
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+199
-195
lines changed

Diff for: compiler/test/dotty/tools/dotc/CompilationTests.scala

+1
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ class CompilationTests {
225225
implicit val testGroup: TestGroup = TestGroup("checkInit")
226226
val options = defaultOptions.and("-Ysafe-init", "-Xfatal-warnings")
227227
compileFilesInDir("tests/init/neg", options).checkExpectedErrors()
228+
compileFilesInDir("tests/init/warn", defaultOptions.and("-Ysafe-init")).checkWarnings()
228229
compileFilesInDir("tests/init/pos", options).checkCompile()
229230
compileFilesInDir("tests/init/crash", options.without("-Xfatal-warnings")).checkCompile()
230231
// The regression test for i12128 has some atypical classpath requirements.

Diff for: compiler/test/dotty/tools/vulpix/ParallelTesting.scala

+7-4
Original file line numberDiff line numberDiff line change
@@ -776,7 +776,7 @@ trait ParallelTesting extends RunnerOrchestration { self =>
776776
end maybeFailureMessage
777777

778778
def getWarnMapAndExpectedCount(files: Seq[JFile]): (HashMap[String, Integer], Int) =
779-
val comment = raw"//( *)warn".r
779+
val comment = raw"//( *)(nopos-)?warn".r
780780
val map = new HashMap[String, Integer]()
781781
var count = 0
782782
def bump(key: String): Unit =
@@ -787,8 +787,11 @@ trait ParallelTesting extends RunnerOrchestration { self =>
787787
files.filter(isSourceFile).foreach { file =>
788788
Using(Source.fromFile(file, StandardCharsets.UTF_8.name)) { source =>
789789
source.getLines.zipWithIndex.foreach { case (line, lineNbr) =>
790-
comment.findAllMatchIn(line).foreach { _ =>
791-
bump(s"${file.getPath}:${lineNbr+1}")
790+
comment.findAllMatchIn(line).foreach { m =>
791+
m.group(2) match
792+
case "nopos-" =>
793+
bump("nopos")
794+
case _ => bump(s"${file.getPath}:${lineNbr+1}")
792795
}
793796
}
794797
}.get
@@ -809,7 +812,7 @@ trait ParallelTesting extends RunnerOrchestration { self =>
809812
val key = s"${relativize(srcpos.source.file.toString())}:${srcpos.line + 1}"
810813
if !seenAt(key) then unexpected += key
811814
else
812-
unpositioned += relativize(srcpos.source.file.toString())
815+
if(!seenAt("nopos")) unpositioned += relativize(srcpos.source.file.toString())
813816

814817
reporterWarnings.foreach(sawDiagnostic)
815818

Diff for: tests/init/neg/early-promote2.scala

-6
This file was deleted.

Diff for: tests/init/neg/simple1.scala

-4
This file was deleted.

Diff for: tests/init/neg/soundness4.scala

-3
This file was deleted.

Diff for: tests/init/neg/AbstractFile.scala renamed to tests/init/warn/AbstractFile.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ abstract class AbstractFile {
44
}
55

66
class RemoteFile(url: String) extends AbstractFile {
7-
val localFile: String = s"${url.##}.tmp" // error: usage of `localFile` before it's initialized
7+
val localFile: String = s"${url.##}.tmp" // warn: usage of `localFile` before it's initialized
88
def name: String = localFile
99
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Foo {
22
val self = this
33
val x = self.n
4-
val n = 10 // error
4+
val n = 10 // warn
55
}

Diff for: tests/init/neg/apply.scala renamed to tests/init/warn/apply.scala

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ object A:
66

77
class B:
88
val a = A(this)
9-
val a2 = A.foo(this) // error
9+
val a2 = A.foo(this) // warn
1010
val a3 = A.bar(this)
1111

1212
// test receiver is ThisRef
@@ -20,7 +20,7 @@ object O:
2020

2121
class B:
2222
val a = A(this)
23-
val a2 = A.foo(this) // error
23+
val a2 = A.foo(this) // warn
2424
val a3 = A.bar(this)
2525

2626
val b = new B
@@ -38,7 +38,7 @@ class M(n: N):
3838

3939
class B:
4040
val a = A(this)
41-
val a2 = A.foo(this) // error
41+
val a2 = A.foo(this) // warn
4242
val a3 = A.bar(this)
4343
end M
4444

Diff for: tests/init/neg/apply2.scala renamed to tests/init/warn/apply2.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class O:
33
println(n)
44

55
class B:
6-
val a = A(this) // error
6+
val a = A(this) // warn
77

88
val b = new B
99
val n = 10
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
final class MyAsInstanceOfClass(o: MyAsInstanceOfClass) {
22
val other: MyAsInstanceOfClass = {
33
if (o.asInstanceOf[MyAsInstanceOfClass].oRef ne null) o
4-
else new MyAsInstanceOfClass(this) // error
4+
else new MyAsInstanceOfClass(this) // warn
55
}
66
val oRef = o
77
}

Diff for: tests/init/neg/by-name-error.scala renamed to tests/init/warn/by-name-error.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ object Foo {
88
}
99

1010
class A {
11-
val foo = implicitly[Foo] // error
11+
val foo = implicitly[Foo] // warn
1212
assert(foo eq foo.next)
1313
}

Diff for: tests/init/neg/closureLeak.scala renamed to tests/init/warn/closureLeak.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ class Outer {
88
}
99

1010
val l: List[A] = List(new A(5), new A(10))
11-
l.foreach(a => a.addX(this)) // error
11+
l.foreach(a => a.addX(this)) // warn
1212
val p = 10
1313
}

Diff for: tests/init/neg/cold-insert-hot-array.scala renamed to tests/init/warn/cold-insert-hot-array.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ object A:
33

44
class B {
55
var a = new Array[B](2)
6-
A.foo(this, a) // error
6+
A.foo(this, a) // warn
77
println(a(0).i)
88
val i = 99
99
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
case class A(b: B) {
22
val x1 = b.x
3-
val x = B(this) // error
3+
val x = B(this) // warn
44
val y = x.a
55
}
66

77
case class B(a: A) {
88
val x1 = a.x
9-
val x = A(this) // error
9+
val x = A(this) // warn
1010
val h = x.b
1111
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
class A(x: B) {
22
println(x.b)
3-
val a = new B(this) // error
3+
val a = new B(this) // warn
44
val d = a.b
55
}
66

77
class B(x: A) {
88
println(x.a)
9-
val b = new A(this) // error
9+
val b = new A(this) // warn
1010
val d = b.a
1111
}

Diff for: tests/init/neg/default-this.scala renamed to tests/init/warn/default-this.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class A {
66
class B extends A {
77
def updateThenCompare(c: Int): Boolean = {
88
x = c
9-
compare() // error
9+
compare() // warn
1010
}
1111
val result = updateThenCompare(5)
1212
}

Diff for: tests/init/neg/early-promote.scala renamed to tests/init/warn/early-promote.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class A { // checking A
2424
def c = new C
2525
}
2626
val b = new B()
27-
println(b) // error: the checker simply issue warnings for objects that contain inner classes
27+
println(b) // warn: the checker simply issue warnings for objects that contain inner classes
2828
val af = 42
2929
}
3030

Diff for: tests/init/warn/early-promote2.scala

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class M {
2+
println(this) // warn
3+
foo()
4+
private val a = 5 // warn
5+
def foo() = a
6+
}

Diff for: tests/init/neg/early-promote3.scala renamed to tests/init/warn/early-promote3.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ abstract class A {
66
}
77

88
class M extends A {
9-
def bar() = promote(this) // error
9+
def bar() = promote(this) // warn
1010
def promote(m: M) = m.foo()
1111
}

Diff for: tests/init/neg/early-promote4.scala renamed to tests/init/warn/early-promote4.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ class Outer {
1616

1717
class Dummy {
1818
val m: Int = n + 4
19-
val n: Int = 10 // error
19+
val n: Int = 10 // warn
2020
}

Diff for: tests/init/neg/early-promote5.scala renamed to tests/init/warn/early-promote5.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ class Outer {
1414

1515
class Container {
1616
val o = new Outer
17-
val m = new o.M(this) // error
17+
val m = new o.M(this) // warn
1818
val s = "hello"
1919
}
2020

2121
class Dummy {
2222
val m: Int = n + 4
23-
val n: Int = 10 // error
23+
val n: Int = 10 // warn
2424
}

Diff for: tests/init/neg/escape1.scala renamed to tests/init/warn/escape1.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Foo {
2-
val a = Foo.bar(this) // error
2+
val a = Foo.bar(this) // warn
33
val b = "hello"
44
}
55

Diff for: tests/init/neg/features-high-order.scala renamed to tests/init/warn/features-high-order.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ abstract class Parent {
44
}
55
class Child extends Parent {
66
val a = f()
7-
val b = "hello" // error
7+
val b = "hello" // warn
88
def message: String = b
99
}

Diff for: tests/init/neg/features-linearization.scala renamed to tests/init/warn/features-linearization.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
trait TA {
2-
val x = "world" // error
2+
val x = "world" // warn
33
}
44

55
trait TB {

Diff for: tests/init/neg/features-trees.scala renamed to tests/init/warn/features-trees.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ class Trees {
22
class ValDef { counter += 1 }
33
class EmptyValDef extends ValDef
44
val theEmptyValDef = new EmptyValDef
5-
private var counter = 0 // error
5+
private var counter = 0 // warn
66
}

Diff for: tests/init/neg/final-fields.scala renamed to tests/init/warn/final-fields.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ class Test1 extends U {
2929
}
3030

3131
class Test extends T {
32-
override final val f1 = /*super.f1*/ 1 + f2 // error
33-
override final val f2 = 2 // error
34-
override final val f3 = {println(3); 3} // error
35-
override val f4 = f3 + 1 // error
32+
override final val f1 = /*super.f1*/ 1 + f2 // warn
33+
override final val f2 = 2 // warn
34+
override final val f3 = {println(3); 3} // warn
35+
override val f4 = f3 + 1 // warn
3636

3737
def g: 3 = { println("g"); 3 }
3838
final val x = g + 1

Diff for: tests/init/neg/flow2.scala renamed to tests/init/warn/flow2.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class Foo {
22
val len = list.size
3-
val list = List(4, 6) // error
3+
val list = List(4, 6) // warn
44

55
lazy val len2 = list2.size // ok
66
val list2 = List(4, 6)

Diff for: tests/init/neg/function-loop.scala renamed to tests/init/warn/function-loop.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ class Foo {
22
val f: Int => Foo = (x: Int) => if x > 0 then f(x) else this
33
f(10).n
44

5-
val n = 10 // error
5+
val n = 10 // warn
66
}

Diff for: tests/init/neg/function1.scala renamed to tests/init/warn/function1.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ class Foo {
44
val fun2: Int => Int = n => 1 + n + list.size
55
fun2(5)
66

7-
List(5, 9).map(n => 2 + n + list.size) // error
7+
List(5, 9).map(n => 2 + n + list.size) // warn
88

9-
final val list = List(1, 2, 3) // error
9+
final val list = List(1, 2, 3) // warn
1010

1111
List(5, 9).map(n => 3 + n + list.size)
1212
}

Diff for: tests/init/neg/function10.scala renamed to tests/init/warn/function10.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class Base { self =>
2-
(0 to 10).foreach { i => // error
2+
(0 to 10).foreach { i => // warn
33
println(a)
44
}
55

Diff for: tests/init/neg/function11.scala renamed to tests/init/warn/function11.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
final class Capture {
22
private var m: Boolean = false
33

4-
(0 to 10).foreach { i => // error
4+
(0 to 10).foreach { i => // warn
55
f()
66
}
77

Diff for: tests/init/neg/function2.scala renamed to tests/init/warn/function2.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ final class Foo {
22
def fun: Int => Int = n => n + x.size
33
fun(5)
44

5-
val x = "hello" // error
5+
val x = "hello" // warn
66
}

Diff for: tests/init/neg/hybrid1.scala renamed to tests/init/warn/hybrid1.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ class Y {
1717

1818
new C
1919

20-
val n = 10 // error
20+
val n = 10 // warn
2121
}

Diff for: tests/init/neg/hybrid2.scala renamed to tests/init/warn/hybrid2.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ class Y {
1515
val x = new X
1616
x.b.g
1717

18-
val n = 10 // error
18+
val n = 10 // warn
1919
}

Diff for: tests/init/neg/hybrid4.scala renamed to tests/init/warn/hybrid4.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ class Foo {
88
}
99

1010
val bar: Bar = new Bar
11-
val list = List(1, 2, 3) // error
11+
val list = List(1, 2, 3) // warn
1212
}

Diff for: tests/init/neg/hybrid5.scala renamed to tests/init/warn/hybrid5.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ class Foo {
1515
def g = new Foo.this.Inner
1616
}
1717

18-
val list = List(1, 2, 3) // error
18+
val list = List(1, 2, 3) // warn
1919
}

Diff for: tests/init/neg/hybrid6.scala renamed to tests/init/warn/hybrid6.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ class Foo {
1111
def g = list
1212
}
1313

14-
val list = List(1, 2, 3) // error
14+
val list = List(1, 2, 3) // warn
1515
}

Diff for: tests/init/neg/i10549b.scala renamed to tests/init/warn/i10549b.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ class Wrap {
44
abstract class E[+T] { def foo: T }
55
object E {
66
final val A: E[Nothing] = new E { def foo = ref }
7-
val ref = qux(A) // error
7+
val ref = qux(A) // warn
88
}
99
}

Diff for: tests/init/neg/i11572.scala renamed to tests/init/warn/i11572.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class A {
55
trait Bounded {
66
type T >: Cov[Int] <: Cov[String]
77
}
8-
val t: Bounded = new Bounded { // error
8+
val t: Bounded = new Bounded { // warn
99
// Note: using this instead of t produces an error (as expected)
1010
override type T >: t.T <: t.T
1111
}

Diff for: tests/init/neg/i12544.scala renamed to tests/init/warn/i12544.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class Outer:
1515

1616
class B() { def foo() = n + 1 }
1717
def g(b: B): Int = b.foo()
18-
g(new B()) // error
18+
g(new B()) // warn
1919
val n: Int = 10
2020

2121
@main def main(): Unit = {

Diff for: tests/init/neg/i15363.scala renamed to tests/init/warn/i15363.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
class A:
22
// should report one error here
3-
val b = new B(this) // error
3+
val b = new B(this) // warn
44
val m = 10
55
val n = 20
66

0 commit comments

Comments
 (0)