// 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_asserts

// SR-13362
// This currently fails on non-Intel architectures due to no baseline being
// available and it is not possible to filter across architectures in the
// output.
// XFAIL: CPU=arm64 || CPU=arm64e

// 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
// RUN: %clang -E -P -x c %S/stability-stdlib-abi-without-asserts.test -o - > %t.tmp/stability-stdlib-abi.swift.expected
// RUN: %clang -E -P -x c %S/stability-stdlib-abi-with-asserts.test -o - >> %t.tmp/stability-stdlib-abi.swift.expected
// RUN: %clang -E -P -x c %t.tmp/stability-stdlib-abi.swift.expected -o - | sed '/^\s*$/d' | sort > %t.tmp/stability-stdlib-abi.swift.expected.sorted
// 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.sorted %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 Collection.removingSubranges(_:) has been removed
Func Collection.subranges(of:) has been removed
Func Collection.subranges(where:) has been removed
Func MutableCollection.moveSubranges(_:to:) has been removed
Func MutableCollection.removeSubranges(_:) has been removed
Func RangeReplaceableCollection.removeSubranges(_:) has been removed
Func _collectReferencesInsideObject(_:) is a new API without @available attribute
Func _loadDestroyTLSCounter() is a new API without @available attribute
Func _measureRuntimeFunctionCountersDiffs(objects:_:) is a new API without @available attribute
Protocol _RuntimeFunctionCountersStats is a new API without @available attribute
Struct DiscontiguousSlice has been removed
Struct RangeSet has been removed
Struct _GlobalRuntimeFunctionCountersState is a new API without @available attribute
Struct _ObjectRuntimeFunctionCountersState is a new API without @available attribute
Struct _RuntimeFunctionCounters is a new API without @available attribute
Subscript Collection.subscript(_:) has been removed
Subscript MutableCollection.subscript(_:) has been removed
