Skip to content

Commit f785662

Browse files
committed
[ownership] Now that we can run -Onone tests with both ownership and without, run pound_assert in both modes to prevent this test from breaking.
I also extracted out the recursion test into a FileCheck test so that we can avoid having to do a -verify pattern match again the exact line where the recursion limit was hit. This limit is noisy in the face of codegen changes since we are IIRC counting instructions. Thus using -verify we can't pattern match since the line can change easily.
1 parent dff4c78 commit f785662

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

test/SILOptimizer/pound_assert.swift

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %target-swift-frontend -enable-experimental-static-assert -emit-sil %s -verify
2+
// RUN: %target-swift-frontend -enable-experimental-static-assert -enable-ownership-stripping-after-serialization -emit-sil %s -verify
23

34
// REQUIRES: optimized_stdlib
45
// REQUIRES: asserts
@@ -67,18 +68,6 @@ func test_loops() {
6768
#assert(infiniteLoop() == 1)
6869
}
6970

70-
// NOTE: We currently hit the limit of 512 on a debug_value in the prelude of
71-
// this function. TODO: What is the right thing to do here?
72-
func recursive(a: Int) -> Int { // expected-note {{limit exceeded here}}
73-
return a == 0 ? 0 : recursive(a: a-1)
74-
}
75-
76-
func test_recursive() {
77-
// expected-error @+2 {{#assert condition not constant}}
78-
// expected-note @+1 {{exceeded instruction limit: 512 when evaluating the expression at compile time}}
79-
#assert(recursive(a: 20000) > 42)
80-
}
81-
8271
func conditional(_ x: Int) -> Int {
8372
if x < 0 {
8473
return 0
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// RUN: not %target-swift-frontend -enable-experimental-static-assert -emit-sil %s 2>&1 | %FileCheck %s
2+
// RUN: not %target-swift-frontend -enable-experimental-static-assert -enable-ownership-stripping-after-serialization -emit-sil %s 2>&1 | %FileCheck %s
3+
4+
// This is a special FileCheck test for testing that we properly catch that we
5+
// are recursing here. The reason why this is separate from the other
6+
// pound_assert tests is that the "limit exceeded" here diagnostic can vary
7+
// depending on the codegen since we are using an arbitrary limit of 512. If the
8+
// codegen changes, the line where we stop evaluating can change meaning that
9+
// the note moves around lines. With FileCheck we have more flexibility to just
10+
// match what we actually want.
11+
12+
// CHECK: error: #assert condition not constant
13+
// CHECK: note: exceeded instruction limit: 512 when evaluating the expression at compile time
14+
// CHECK: limit exceeded here
15+
func recursive(a: Int) -> Int {
16+
return a == 0 ? 0 : recursive(a: a-1)
17+
}
18+
19+
func test_recursive() {
20+
#assert(recursive(a: 20000) > 42)
21+
}
22+

0 commit comments

Comments
 (0)