Build Information
Successful build of SwiftMath, reference main (1d2c90), with Swift 6.4 for macOS (SPM) on 22 Sep 2026 18:53:49 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/mgriebling/SwiftMath.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/mgriebling/SwiftMath
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 1d2c908 Merge pull request #70 from samuelzxu/fix/issue-66-left-right-duplication
Cloned https://github.com/mgriebling/SwiftMath.git
Revision (git rev-parse @):
1d2c90827e9c3908269d810d055fb03b7da5fd53
SUCCESS checkout https://github.com/mgriebling/SwiftMath.git at main
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.4
Building package at path: $PWD
https://github.com/mgriebling/SwiftMath.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun swift build --arch arm64
Building for debugging...
[Pre-planning 1 / 95]
[Planning deferred tasks]
[30 / 41] SwiftMath_SwiftMath
[32 / 41]
[33 / 42] SwiftMath
[43 / 119]
[46 / 119]
[54 / 119]
[56 / 119]
[57 / 119]
[62 / 119]
[64 / 119]
[66 / 119]
[69 / 119]
[74 / 119]
[77 / 119]
[79 / 119]
[80 / 119]
[90 / 119]
[92 / 119]
[93 / 119]
[96 / 119]
[98 / 119]
[110 / 119] SwiftMath
[111 / 119] SwiftMath
[116 / 119] SwiftMath
[118 / 119] SwiftMath
Build complete! (11.09 sec)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTAtomTokenizer.swift:272:19: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m269 |[0;0m
[0;36m270 |[0;0m let debugTokenization = false // Enable to debug text tokenization
[0;36m271 |[0;0m if debugTokenization {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m272 |[0;0m print("\n=== Tokenizing multi-char text: '\(text)' ===")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m273 |[0;0m }
[0;36m274 |[0;0m
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTAtomTokenizer.swift:320:23: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m317 |[0;0m )
[0;36m318 |[0;0m
[0;36m319 |[0;0m if debugTokenization {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m320 |[0;0m print(" [\(charIndex)] '\(charString)' breakBefore=\(isBreakBefore) breakAfter=\(isBreakAfter) penaltyBefore=\(penaltyBefore) penaltyAfter=\(penaltyAfter) width=\(width)")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m321 |[0;0m }
[0;36m322 |[0;0m
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:87:53: [1;33mwarning: [1;39mimmutable value 't' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m85 |[0;0m // Check if element fits on current line
[0;36m86 |[0;0m if !lines.last!.isEmpty && currentWidth + element.width > maxWidth - margin {
[0;36m87 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m `- [1;33mwarning: [1;39mimmutable value 't' was never used; consider replacing with '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m88 |[0;0m print(" Doesn't fit (width=\(currentWidth) + \(element.width) > \(maxWidth)), current line has \(lines.last!.count) elements")
[0;36m89 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:215:13: [1;33mwarning: [1;39minitialization of immutable value 'debugFit' was never used; consider replacing with assignment to '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m213 |[0;0m
[0;36m214 |[0;0m let debugBreak = false // Enable to debug break point selection
[0;36m215 |[0;0m let debugFit = false
[0;36m|[0;0m `- [1;33mwarning: [1;39minitialization of immutable value 'debugFit' was never used; consider replacing with assignment to '_' or removing it[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/no-usage\NoUsage]8;;\]
[0;36m216 |[0;0m
[0;36m217 |[0;0m // Scan from right to left to prefer breaking later in the line
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:252:19: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m249 |[0;0m }
[0;36m250 |[0;0m
[0;36m251 |[0;0m if debugBreak {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m252 |[0;0m print(" Best break: index=\(bestIndex ?? -1), penalty=\(lowestPenalty)")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m253 |[0;0m }
[0;36m254 |[0;0m
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:38:19: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m35 |[0;0m let debugPunctuation = false // Enable to debug line breaking issues
[0;36m36 |[0;0m
[0;36m37 |[0;0m if debugPunctuation {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m38 |[0;0m print("\n=== MTLineFitter: fitting \(elements.count) elements, maxWidth=\(maxWidth) ===")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m39 |[0;0m for (idx, elem) in elements.enumerated() {
[0;36m40 |[0;0m if case .text(let t) = elem.content {
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:53:62: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m51 |[0;0m let element = elements[i]
[0;36m52 |[0;0m
[0;36m53 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m | `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m54 |[0;0m print("\n Processing element[\(i)]: '\(t)' breakBefore=\(element.isBreakBefore)")
[0;36m55 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:87:66: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m85 |[0;0m // Check if element fits on current line
[0;36m86 |[0;0m if !lines.last!.isEmpty && currentWidth + element.width > maxWidth - margin {
[0;36m87 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m | `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m88 |[0;0m print(" Doesn't fit (width=\(currentWidth) + \(element.width) > \(maxWidth)), current line has \(lines.last!.count) elements")
[0;36m89 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:93:31: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m90 |[0;0m // Element doesn't fit - find best break point in current line
[0;36m91 |[0;0m if let breakIndex = findBestBreak(in: lines[lines.count - 1]) {
[0;36m92 |[0;0m if debugPunctuation {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m93 |[0;0m print(" Found break at index \(breakIndex) out of \(lines.last!.count) elements")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m94 |[0;0m if breakIndex < lines.last!.count {
[0;36m95 |[0;0m if case .text(let t) = lines.last![breakIndex].content {
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:113:74: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m111 |[0;0m
[0;36m112 |[0;0m // Now check if current element should go on new line or stay with old line
[0;36m113 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m | `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m114 |[0;0m print(" Checking element '\(t)' (i=\(i)): breakBefore=\(element.isBreakBefore)")
[0;36m115 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:122:78: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m120 |[0;0m // Example: "matrices" breaks before 'm', so 'm','a','t','r','i' move to new line.
[0;36m121 |[0;0m // When we process 'c', it can't start a line, so it must join the new line.
[0;36m122 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m | `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m123 |[0;0m print(" -> Adding '\(t)' to new line (part of unbreakable sequence)")
[0;36m124 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:130:78: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m128 |[0;0m continue
[0;36m129 |[0;0m } else {
[0;36m130 |[0;0m if debugPunctuation, case .text(let t) = element.content {
[0;36m|[0;0m | `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m131 |[0;0m print(" -> Adding '\(t)' to new line (can start line)")
[0;36m132 |[0;0m }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTLineFitter.swift:169:19: [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m166 |[0;0m let finalLines = lines.filter { !$0.isEmpty }
[0;36m167 |[0;0m
[0;36m168 |[0;0m if debugPunctuation {
[0;36m|[0;0m `- [1;39mnote: [1;39mcondition always evaluates to false[0;0m
[0;36m169 |[0;0m print("\n=== Final lines: ===")
[0;36m|[0;0m `- [1;33mwarning: [1;39mwill never be executed[0;0m
[0;36m170 |[0;0m for (lineIdx, line) in finalLines.enumerated() {
[0;36m171 |[0;0m print("Line \(lineIdx):")
[#NoUsage]: <https://docs.swift.org/compiler/documentation/diagnostics/no-usage>
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTDisplayGenerator.swift:122:25: [1;33mwarning: [1;39mvariable 'mutableDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m120 |[0;0m case .display(let preRenderedDisplay):
[0;36m121 |[0;0m // Use pre-rendered display (fraction, radical, etc.)
[0;36m122 |[0;0m var mutableDisplay = preRenderedDisplay
[0;36m|[0;0m `- [1;33mwarning: [1;39mvariable 'mutableDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m123 |[0;0m mutableDisplay.position = elementPosition
[0;36m124 |[0;0m displays.append(mutableDisplay)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTDisplayGenerator.swift:180:25: [1;33mwarning: [1;39mvariable 'mutableDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m178 |[0;0m displays.append(display)
[0;36m179 |[0;0m case .display(let preRenderedDisplay):
[0;36m180 |[0;0m var mutableDisplay = preRenderedDisplay
[0;36m|[0;0m `- [1;33mwarning: [1;39mvariable 'mutableDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m181 |[0;0m mutableDisplay.position = basePosition
[0;36m182 |[0;0m displays.append(mutableDisplay)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTDisplayGenerator.swift:308:21: [1;33mwarning: [1;39mvariable 'mutableScript' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m306 |[0;0m
[0;36m307 |[0;0m // Reset the scriptDisplay's position to (0, 0) since it will be positioned by the wrapper
[0;36m308 |[0;0m var mutableScript = scriptDisplay
[0;36m|[0;0m `- [1;33mwarning: [1;39mvariable 'mutableScript' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m309 |[0;0m mutableScript.position = CGPoint.zero
[0;36m310 |[0;0m
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTDisplayGenerator.swift:348:17: [1;33mwarning: [1;39mvariable 'baseDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m346 |[0;0m // Update the first base display's dimensions to reflect the full extent
[0;36m347 |[0;0m // Width should be base + script, without the spaceAfterScript (that's for cursor advancement)
[0;36m348 |[0;0m var baseDisplay = displays[baseDisplayStartIndex]
[0;36m|[0;0m `- [1;33mwarning: [1;39mvariable 'baseDisplay' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m349 |[0;0m baseDisplay.ascent = maxAscent
[0;36m350 |[0;0m baseDisplay.descent = maxDescent
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/Tokenization/MTDisplayPreRenderer.swift:53:42: [1;33mwarning: [1;39mconditional cast from 'MTMathListDisplay' to 'MTMathListDisplay' always succeeds[0;0m
[0;36m51 |[0;0m // If the result is a MTMathListDisplay with a single subdisplay, unwrap it
[0;36m52 |[0;0m // This matches the behavior of the legacy typesetter
[0;36m53 |[0;0m if let mathListDisplay = display as? MTMathListDisplay,
[0;36m|[0;0m `- [1;33mwarning: [1;39mconditional cast from 'MTMathListDisplay' to 'MTMathListDisplay' always succeeds[0;0m
[0;36m54 |[0;0m mathListDisplay.subDisplays.count == 1 {
[0;36m55 |[0;0m return mathListDisplay.subDisplays[0]
[#VariableNeverMutated]: <https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated>
/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/MathRender/MTTypesetter.swift:1526:13: [1;33mwarning: [1;39mvariable 'accentee' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m1524 |[0;0m guard let accent = accent else { return nil }
[0;36m1525 |[0;0m
[0;36m1526 |[0;0m var accentee = MTTypesetter.createLineForMathList(accent.innerList, font:font, style:style, cramped:true)
[0;36m|[0;0m `- [1;33mwarning: [1;39mvariable 'accentee' was never mutated; consider changing to 'let' constant[0;0m [#]8;;https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated\VariableNeverMutated]8;;\]
[0;36m1527 |[0;0m if accent.nucleus.isEmpty {
[0;36m1528 |[0;0m // no accent!
[#VariableNeverMutated]: <https://docs.swift.org/compiler/documentation/diagnostics/variable-never-mutated>
Build complete.
{
"default_localization" : "en",
"dependencies" : [
],
"manifest_display_name" : "SwiftMath",
"name" : "SwiftMath",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "11.0"
},
{
"name" : "macos",
"version" : "12.0"
}
],
"products" : [
{
"name" : "SwiftMath",
"targets" : [
"SwiftMath"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SwiftMathTests",
"module_type" : "SwiftTarget",
"name" : "SwiftMathTests",
"path" : "Tests/SwiftMathTests",
"sources" : [
"AccentSpacingComparisonTest.swift",
"ArrowStretchingTest.swift",
"ConcurrencyThreadsafeTests.swift",
"DebugOverlapTest.swift",
"DotlessIJAccentTests.swift",
"FractionBarOverlapTests.swift",
"GlyphBoundsTest.swift",
"LeftRightDuplicationTests.swift",
"LimitOperatorRegressionTests.swift",
"MTFontMathTableV2Tests.swift",
"MTFontV2Tests.swift",
"MTMathListBuilderTests.swift",
"MTMathListTests.swift",
"MTMathUILabelLineWrappingTests.swift",
"MTTypesetterTests.swift",
"MathDelimiterTests.swift",
"MathFontTests.swift",
"MathImageTests.swift",
"MatricesLineBreakingTest.swift",
"RelationOperatorSpacingTests.swift",
"Tokenization/MTAtomTokenizerTests.swift",
"Tokenization/MTBreakableElementTests.swift",
"Tokenization/MTDisplayGeneratorTests.swift",
"Tokenization/MTDisplayPreRendererTests.swift",
"Tokenization/MTElementWidthCalculatorTests.swift",
"Tokenization/MTLineFitterTests.swift",
"Tokenization/MTTokenizationImprovementTests.swift",
"Tokenization/MTTokenizationRealWorldTests.swift",
"Tokenization/MTTypesetter+TokenizationTests.swift",
"WidehatGlyphTest.swift",
"WidehatTests.swift"
],
"target_dependencies" : [
"SwiftMath"
],
"type" : "test"
},
{
"c99name" : "SwiftMath",
"module_type" : "SwiftTarget",
"name" : "SwiftMath",
"path" : "Sources/SwiftMath",
"product_memberships" : [
"SwiftMath"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/SwiftMath/mathFonts.bundle",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"MathBundle/MTFontMathTableV2.swift",
"MathBundle/MTFontV2.swift",
"MathBundle/MathFont.swift",
"MathBundle/MathImage.swift",
"MathRender/MTBezierPath.swift",
"MathRender/MTColor.swift",
"MathRender/MTConfig.swift",
"MathRender/MTFont.swift",
"MathRender/MTFontManager.swift",
"MathRender/MTFontMathTable.swift",
"MathRender/MTLabel.swift",
"MathRender/MTMathAtomFactory.swift",
"MathRender/MTMathImage.swift",
"MathRender/MTMathList.swift",
"MathRender/MTMathListBuilder.swift",
"MathRender/MTMathListDisplay.swift",
"MathRender/MTMathListIndex.swift",
"MathRender/MTMathUILabel.swift",
"MathRender/MTTypesetter+Tokenization.swift",
"MathRender/MTTypesetter.swift",
"MathRender/MTUnicode.swift",
"MathRender/RWLock.swift",
"MathRender/Tokenization/MTAtomTokenizer.swift",
"MathRender/Tokenization/MTBreakableElement.swift",
"MathRender/Tokenization/MTDisplayGenerator.swift",
"MathRender/Tokenization/MTDisplayPreRenderer.swift",
"MathRender/Tokenization/MTElementWidthCalculator.swift",
"MathRender/Tokenization/MTLineFitter.swift"
],
"type" : "library"
}
],
"tools_version" : "5.7"
}
Done.