// SWIFT_ENABLE_TENSORFLOW
// Note: this test is disabled on `tensorflow` branch because `tensorflow`
// branch adds various public APIs to the stdlib without `@available`
// attributes. These APIs should ideally be removed over time, or upstreamed to
// `master` branch.
// UNSUPPORTED: tensorflow
// SWIFT_ENABLE_TENSORFLOW END

// Welcome, Build Wrangler!
//
// A failure in this test indicates that there is a potential ABI breaking
// change in the Standard Library. If you observe a failure, please reach out to
// the Standard Library team directly to make sure we resolve this quickly!
//
// Instead of XFAILing this test, please consider extending the list of expected
// changes at the bottom. (In addition to ignoring the current set of ABI breaks,
// XFAILing this test also silences any future ABI breaks that may land on this
// branch, which isn't ideal.)
//
// You can find a diff of what needs to be added in the output of the failed
// test run. The order of lines doesn't matter, and you can also include
// comments to refer to any bugs you filed.
//
// Thanks! -- Your friendly stdlib engineers

// REQUIRES: OS=macosx
// REQUIRES: swift_stdlib_no_asserts
// RUN: %empty-directory(%t.tmp)
// mkdir %t.tmp/module-cache && mkdir %t.tmp/dummy.sdk
// RUN: %api-digester -diagnose-sdk -module Swift -o %t.tmp/changes.txt -module-cache-path %t.tmp/module-cache -sdk %t.tmp/dummy.sdk -abi -avoid-location -v
// RUN: %clang -E -P -x c %S/stability-stdlib-abi-without-asserts.test -o - | sed '/^\s*$/d' | sort > %t.tmp/stability-stdlib-abi.swift.expected
// RUN: %clang -E -P -x c %t.tmp/changes.txt -o - | sed '/^\s*$/d' | sort > %t.tmp/changes.txt.tmp
// RUN: diff -u %t.tmp/stability-stdlib-abi.swift.expected %t.tmp/changes.txt.tmp

// The digester can incorrectly register a generic signature change when
// declarations are shuffled. rdar://problem/46618883
// UNSUPPORTED: swift_evolve

Func _prespecialize() is a new API without @available attribute
Func _stdlib_isOSVersionAtLeastOrVariantVersionAtLeast(_:_:_:_:_:_:) is a new API without @available attribute

// These reflection APIs are exposed to facilitate building SwiftReflectionTest.swift when testing Release builds.
Func _getMetadataSection(_:) is a new API without @available attribute
Func _getMetadataSectionCount() is a new API without @available attribute
Func _getMetadataSectionName(_:) is a new API without @available attribute
