blob: baa935541e9fd3ee677ce176b72e6043e9f95c34 [file] [log] [blame]
// RUN: %target-swift-frontend -swift-version 5 -emit-sil -primary-file %s -o /dev/null -verify
// REQUIRES: OS=macosx || OS=ios || OS=tvos || OS=watchos
// Tests for the diagnostics produced by the OSLogOptimization pass that
// performs compile-time analysis and optimization of the new os log prototype
// APIs. The tests here check whether bad user inputs are diagnosed correctly.
// The tests here model the possible invalid inputs to the os log methods.
// TODO: diagnostics will be improved.
import OSLogPrototype
if #available(OSX 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *) {
func testDynamicLogMessage(h: Logger, message: OSLogMessage) {
// FIXME: log APIs must always be passed a string interpolation literal.
// Diagnose this.
h.log(level: .debug, message)
// expected-error @-1 {{globalStringTablePointer builtin must used only on string literals}}
}
func testNonconstantFormatOption(h: Logger, formatOpt: IntFormat) {
h.log(level: .debug, "Minimum integer value: \(Int.min, format: formatOpt)")
// expected-error @-1 {{'OSLogInterpolation.formatString' is not a constant: formatting and privacy options must be literals}}
// expected-error @-2 {{globalStringTablePointer builtin must used only on string literals}}
}
func testNonconstantPrivacyOption(h: Logger, privacyOpt: Privacy) {
h.log(level: .debug, "Minimum integer value: \(Int.min, privacy: privacyOpt)")
// expected-error @-1 {{'OSLogInterpolation.formatString' is not a constant: formatting and privacy options must be literals}}
// expected-error @-2 {{globalStringTablePointer builtin must used only on string literals}}
}
// FIXME: the following test should produce diagnostics and is a not
// valid uses of the log APIs. The string interpolation passed to the os log
// call must be apart of the log call, it cannot be constructed earlier.
// It nonetheless works fine, but should be rejected.
func testNoninlinedOSLogMessage(h: Logger) {
let logMessage: OSLogMessage = "Minimum integer value: \(Int.min)"
h.log(level: .debug, logMessage)
}
func testNoninlinedOSLogMessageComplex(h: Logger, b: Bool) {
let logMessage: OSLogMessage = "Maximum integer value: \(Int.max)"
if !b {
return;
}
h.log(level: .debug, logMessage)
// expected-error @-1 {{globalStringTablePointer builtin must used only on string literals}}
}
}