// Copyright 2024 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package cryptotest import ( "crypto/internal/boring" "internal/asan" "internal/msan" "internal/race" "internal/testenv" "runtime" "testing" ) // SkipTestAllocations skips the test if there are any factors that interfere // with allocation optimizations. func SkipTestAllocations(t *testing.T) { // Go+BoringCrypto uses cgo. if boring.Enabled { t.Skip("skipping allocations test with BoringCrypto") } // The sanitizers sometimes cause allocations. if race.Enabled || msan.Enabled || asan.Enabled { t.Skip("skipping allocations test with sanitizers") } // The plan9 crypto/rand allocates. if runtime.GOOS == "plan9" { t.Skip("skipping allocations test on plan9") } // s390x deviates from other assembly implementations and is very hard to // test due to the lack of LUCI builders. See #67307. if runtime.GOARCH == "s390x" { t.Skip("skipping allocations test on s390x") } // Some APIs rely on inliner and devirtualization to allocate on the stack. testenv.SkipIfOptimizationOff(t) }