Files
swift-mirror/test/SILOptimizer/pound_assert_test_recursive.swift
Ravi Kandhadai 61fd4b1431 [OSLog][Test] Update the new oslog overlay implementation to use
@_semantics("constant_evaluable") annotation to denote constant
evaluable functions.

Add a test suite that uses the sil-opt pass ConstantEvaluableSubsetChecker.cpp
to check the constant evaluability of function in the OSLog
overlay.
2019-09-18 10:44:48 -07:00

23 lines
1.0 KiB
Swift

// RUN: not %target-swift-frontend -enable-experimental-static-assert -emit-sil %s 2>&1 | %FileCheck %s
// RUN: not %target-swift-frontend -enable-experimental-static-assert -enable-ownership-stripping-after-serialization -emit-sil %s 2>&1 | %FileCheck %s
// This is a special FileCheck test for testing that we properly catch that we
// are recursing here. The reason why this is separate from the other
// pound_assert tests is that the "limit exceeded" here diagnostic can vary
// depending on the codegen since we are using an arbitrary limit of 512. If the
// codegen changes, the line where we stop evaluating can change meaning that
// the note moves around lines. With FileCheck we have more flexibility to just
// match what we actually want.
// CHECK: error: #assert condition not constant
// CHECK: note: exceeded instruction limit: {{.*}} when evaluating the expression at compile time
// CHECK: limit exceeded here
func recursive(a: Int) -> Int {
return a == 0 ? 0 : recursive(a: a-1)
}
func test_recursive() {
#assert(recursive(a: 20000) > 42)
}