// RUN: %target-swift-frontend -module-name OptimizationOptions -Onone -emit-sil -primary-file %s -o - | %FileCheck %s --check-prefix=DEBUG
// RUN: %target-swift-frontend -module-name OptimizationOptions -O -emit-sil -primary-file %s -o - | %FileCheck %s --check-prefix=RELEASE
// RUN: %target-swift-frontend -module-name OptimizationOptions -Ounchecked -emit-sil -primary-file %s -o - | %FileCheck %s --check-prefix=UNCHECKED
// RUN: %target-swift-frontend -module-name OptimizationOptions -Oplayground -emit-sil -primary-file %s -o - | %FileCheck %s --check-prefix=PLAYGROUND

// REQUIRES: optimized_stdlib
// REQUIRES: swift_stdlib_asserts

func test_assert(x: Int, y: Int) -> Int {
  assert(x >= y , "x smaller than y")
  return x + y
}

func test_fatal(x: Int, y: Int) -> Int {
  if x > y {
    return x + y
  }
  _preconditionFailure("Human nature ...")
}

func test_precondition_check(x: Int, y: Int) -> Int {
  _precondition(x > y, "test precondition check")
  return x + y
}

func test_partial_safety_check(x: Int, y: Int) -> Int {
  _debugPrecondition(x > y, "test partial safety check")
  return x + y
}

// In debug mode keep user asserts and runtime checks.
// DEBUG-LABEL: sil hidden @_TF19OptimizationOptions11test_assertFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// DEBUG-DAG: string_literal utf8 "x smaller than y"
// DEBUG-DAG: string_literal utf8 "assertion failed"
// DEBUG-DAG: cond_fail
// DEBUG: return

// In playground mode keep user asserts and runtime checks.
// PLAYGROUND-LABEL: sil hidden @_TF19OptimizationOptions11test_assertFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// PLAYGROUND-DAG: "assertion failed"
// PLAYGROUND-DAG: "x smaller than y"
// PLAYGROUND-DAG: cond_fail
// PLAYGROUND: return

// In release mode remove user asserts and keep runtime checks.
// RELEASE-LABEL: sil hidden @_TF19OptimizationOptions11test_assertFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// RELEASE-NOT: "x smaller than y"
// RELEASE-NOT: "assertion failed"
// RELEASE: cond_fail
// RELEASE: return

// In fast mode remove user asserts and runtime checks.
// FAST-LABEL: sil hidden @_TF19OptimizationOptions11test_assertFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// FAST-NOT: "x smaller than y"
// FAST-NOT: "assertion failed"
// FAST-NOT: cond_fail


// In debug mode keep verbose fatal errors.
// DEBUG-LABEL: sil hidden @_TF19OptimizationOptions10test_fatalFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// DEBUG-DAG: "Human nature ..."
// DEBUG-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC:.*fatalErrorMessage.*]] : $@convention(thin)
// DEBUG: apply %[[FATAL_ERROR]]{{.*}}
// DEBUG: unreachable

// In playground mode keep verbose fatal errors.
// PLAYGROUND-LABEL: sil hidden @_TF19OptimizationOptions10test_fatalFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// PLAYGROUND-DAG: "Human nature ..."
// PLAYGROUND-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC:.*fatalErrorMessage.*]] : $@convention(thin)
// PLAYGROUND: apply %[[FATAL_ERROR]]{{.*}}
// PLAYGROUND: unreachable

// In release mode keep succinct fatal errors (trap).
// RELEASE-LABEL: sil hidden @_TF19OptimizationOptions10test_fatalFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// RELEASE-NOT: "Human nature ..."
// RELEASE-NOT: "fatal error"
// RELEASE: cond_fail
// RELEASE: return

// In fast mode remove fatal errors.
// FAST-LABEL: sil hidden @_TF19OptimizationOptions10test_fatalFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// FAST-NOT: "Human nature ..."
// FAST-NOT: "fatal error"
// FAST-NOT: int_trap

// Precondition safety checks.

// In debug mode keep verbose library precondition checks.
// DEBUG-LABEL: sil hidden @_TF19OptimizationOptions23test_precondition_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// DEBUG-DAG: "fatal error"
// DEBUG-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC]]
// DEBUG: apply %[[FATAL_ERROR]]{{.*}}
// DEBUG: unreachable
// DEBUG: return

// In playground mode keep verbose library precondition checks.
// PLAYGROUND-LABEL: sil hidden @_TF19OptimizationOptions23test_precondition_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// PLAYGROUND-DAG: "fatal error"
// PLAYGROUND-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC]]
// PLAYGROUND: apply %[[FATAL_ERROR]]{{.*}}
// PLAYGROUND: unreachable
// PLAYGROUND: return

// In release mode keep succinct library precondition checks (trap).
// RELEASE-LABEL: sil hidden @_TF19OptimizationOptions23test_precondition_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// RELEASE-NOT:  "fatal error"
// RELEASE:  %[[V2:.+]] = builtin "xor_Int1"(%{{.+}}, %{{.+}})
// RELEASE:  cond_fail %[[V2]]
// RELEASE:  return

// In unchecked mode remove library precondition checks.
// UNCHECKED-LABEL: sil hidden @_TF19OptimizationOptions23test_precondition_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// UNCHECKED-NOT:  "fatal error"
// UNCHECKED-NOT:  builtin "int_trap"
// UNCHECKED-NOT:  unreachable
// UNCHECKED:  return

//  Partial safety checks.

// In debug mode keep verbose partial safety checks.
// DEBUG-LABEL: sil hidden @_TF19OptimizationOptions25test_partial_safety_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// DEBUG-DAG: "fatal error"
// DEBUG-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC]]
// DEBUG: apply %[[FATAL_ERROR]]{{.*}}
// DEBUG: unreachable

// In playground mode keep verbose partial safety checks.
// PLAYGROUND-LABEL: sil hidden @_TF19OptimizationOptions25test_partial_safety_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// PLAYGROUND-DAG: "fatal error"
// PLAYGROUND-DAG: %[[FATAL_ERROR:.+]] = function_ref @[[FATAL_ERROR_FUNC]]
// PLAYGROUND: apply %[[FATAL_ERROR]]{{.*}}
// PLAYGROUND: unreachable

// In release mode remove partial safety checks.
// RELEASE-LABEL: sil hidden @_TF19OptimizationOptions25test_partial_safety_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// RELEASE-NOT:  "fatal error"
// RELEASE-NOT:  builtin "int_trap"
// RELEASE-NOT:  unreachable
// RELEASE: return

// In fast mode remove partial safety checks.
// FAST-LABEL: sil hidden @_TF19OptimizationOptions25test_partial_safety_checkFT1xSi1ySi_Si : $@convention(thin) (Int, Int) -> Int {
// FAST-NOT:  "fatal error"
// FAST-NOT:  builtin "int_trap"
// FAST-NOT:  unreachable
// FAST: return
