Skip to content

Disable SwiftCompilerSources for Windows ARM64. #74432

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 24, 2024

Conversation

hjyamauchi
Copy link
Contributor

@hjyamauchi
Copy link
Contributor Author

@compnerd

@compnerd
Copy link
Member

@swift-ci please test

@compnerd
Copy link
Member

CC: @etcwilde @shahmishal

@hjyamauchi hjyamauchi changed the title Arm64build Fix the Windows ARM64 toolchain segfault issue in the official build Jun 14, 2024
@bnbarham
Copy link
Contributor

@eeckstein are you able to look into the segfault here (presumably a miscompile)? The whole point of those two PRs was so that SwiftCompilerSources is built everywhere, which this would be regressing.

Copy link
Contributor

@eeckstein eeckstein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of reverting the enablement of SwiftCompilerSources on Windows, you should just disable SwiftCompilerSources on ARM64-Windows (as a temporary workaround).
Otherwise we will not catch SwiftCompilerSources regression on X86 Windows during PR testing

@eeckstein
Copy link
Contributor

@eeckstein are you able to look into the segfault here (presumably a miscompile)?

Unfortunately not. I don't have the environment to do so. Also, this is a C++ interop or LLVM issue - which I'm not familiar with.

@hjyamauchi
Copy link
Contributor Author

@eeckstein How do we disable SwiftCompilerSources on ARM64-Windows?

@eeckstein
Copy link
Contributor

How do we disable SwiftCompilerSources on ARM64-Windows?

set(BOOTSTRAPPING_MODE "OFF") in case the CMAKE_SYSTEM_NAME is "Windows" and the architecture (don't know the cmake variable) is arm64

@eeckstein
Copy link
Contributor

But please check first if the recently merged #74512 did fix the issue

@hjyamauchi
Copy link
Contributor Author

Yeah will do!

@hjyamauchi
Copy link
Contributor Author

hjyamauchi commented Jun 20, 2024

@eeckstein #74512 didn't seem to fix the issue. Updated this PR to disable SwiftCompilerSources for Windows/ARM64 which fixes the issue. PTAL.

@etcwilde
Copy link
Member

Are you building Swift 6 or main? The patch for Swift 6 hasn't landed yet and it looks like main is building because there are #if !os(Windows) around the offending bits on the main branch.

@hjyamauchi
Copy link
Contributor Author

I'm building main

@etcwilde
Copy link
Member

Hmm, that's a bummer. At least it looks like the arm64-main CI is working though: https://ci-external.swift.org/job/swift-main-windows-toolchain-arm64/. What part am I missing here?

@hjyamauchi
Copy link
Contributor Author

hjyamauchi commented Jun 20, 2024

The build works fine. The issue is at runtime and that the compiler binary from the build crashes right after it's launched and it cannot even compile a hello world program.

@hjyamauchi hjyamauchi changed the title Fix the Windows ARM64 toolchain segfault issue in the official build Re-enable SwiftCompilerSources for Windows ARM64. Jun 20, 2024
@atrick
Copy link
Contributor

atrick commented Jun 20, 2024

If you're blocked on this
rdar://128434000 ([nonescapable] [LifetimeDependenceInsertion] Package resolution fails with arm64 Windows toolchain)

Then hopefully this will temporarily unblock you
#74599

@hjyamauchi
Copy link
Contributor Author

@atrick Thanks for the info! #74599 seems to change the error to the following locally for me. So it may be fixing an error but the compiler still crashes.

>swiftc hello.swift -o hello.exe
error: compile command failed due to exception 29 (use -v to see invocation)
Optimizer/Context.swift:42: Fatal error: unhandled SILStage case
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/Users/hiroshi/AppData/Local/Programs/Swift/Toolchains/0.0.0+Asserts/usr/bin/swift-frontend.exe -frontend -c -primary-file C:\\Users\\hiroshi\\hello.swift -target aarch64-unknown-windows-msvc -Xllvm -aarch64-use-tbi -disable-objc-interop -sdk C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Platforms\\0.0.0\\Windows.platform\\Developer\\SDKs\\Windows.sdk -color-diagnostics -empty-abi-descriptor -Xcc -working-directory -Xcc C:\\Users\\hiroshi -resource-dir C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\lib\\swift -module-name hello -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\local\\bin -o C:\\Users\\hiroshi\\AppData\\Local\\Temp\\TemporaryDirectory.Ad0YYo\\hello-1.o
1.      Swift version 6.0-dev (LLVM 6a4cb0f4db7bec7, Swift 76d5dd44894ccb0)
2.      Compiling with effective version 5.10
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for hello)
4.      While running pass #10 SILFunctionTransform "LetPropertyLowering" on SILFunction "@main".
Exception Code: 0xC000001D
 #0 0x00007fff7ca256a4 $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF (C:\Users\hiroshi\AppData\Local\Programs\Swift\Runtimes\0.0.0\usr\bin\swiftCore.dll+0x156a4)
 #1 0x00007ff6f9e85744 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x35744)
 #2 0x00007ff6f9e67bd8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x17bd8)
 #3 0x00007ff6faa3a660 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbea660)
 #4 0x00007ff6faa57e84 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc07e84)
 #5 0x00007ff6faa56d98 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc06d98)
 #6 0x00007ff6faa50388 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00388)
 #7 0x00007ff6faa506e8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc006e8)
 #8 0x00007ff6faa50064 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00064)
 #9 0x00007ff6faaa3820 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc53820)
#10 0x00007ff6faa47b8c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbf7b8c)
#11 0x00007ff6faa5076c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc0076c)
#12 0x00007ff6faa3a74c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbea74c)
#13 0x00007ff6fa4973f0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6473f0)
#14 0x00007ff6fa22da54 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dda54)
#15 0x00007ff6fa22e620 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3de620)
#16 0x00007ff6fa2239cc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3d39cc)
#17 0x00007ff6fa234e78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3e4e78)
#18 0x00007ff6fa22d494 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd494)
#19 0x00007ff6fa22d710 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd710)
#20 0x00007ff6fa22f5c0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3df5c0)
#21 0x00007ff6fa1bf3e4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f3e4)
#22 0x00007ff6fa1bef78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36ef78)
#23 0x00007ff7000bac78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626ac78)
#24 0x00007ff7000bad14 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626ad14)
#25 0x00007ff84ce12310 (C:\Windows\System32\KERNEL32.DLL+0x12310)
#26 0x00007ff84f395b2c (C:\Windows\SYSTEM32\ntdll.dll+0x75b2c)

Copy link
Contributor

@eeckstein eeckstein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, the title of the PR is kind of wrong. Shouldn't it be "disable SwiftCompilerSources..."?

@hjyamauchi hjyamauchi changed the title Re-enable SwiftCompilerSources for Windows ARM64. Disable SwiftCompilerSources for Windows ARM64. Jun 21, 2024
@hjyamauchi
Copy link
Contributor Author

Also, the title of the PR is kind of wrong. Shouldn't it be "disable SwiftCompilerSources..."?

Yes, fixed.

@eeckstein
Copy link
Contributor

@hjyamauchi Since you can reproduce the crash locally, can you try to figure out where it crashes exactly. The crashlog doesn't have symbol information, unfortunately. It looks like an assert is triggering. Could you try to find which assert it is?
One way to do this is to build SwiftCompilerSources with -Onone. Then we should get the assert message and line info.

@hjyamauchi
Copy link
Contributor Author

hjyamauchi commented Jun 21, 2024

Sure. I think this is the fatal error in the LetPropertyLowering pass.

Optimizer/Context.swift:42: Fatal error: unhandled SILStage case
SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift

  var silStage: SILStage {
    switch _bridged.getSILStage() {
      case .Raw:       return .raw
      case .Canonical: return .canonical
      case .Lowered:   return .lowered
      default:         fatalError("unhandled SILStage case")
    }
  }

@eeckstein
Copy link
Contributor

Can you try to run the compiler with -Xllvm -sil-disable-pass=let-property-lowering to see if there are other crashes?

@hjyamauchi
Copy link
Contributor Author

It segfaults in BooleanLiteralFolding:

>swiftc hello.swift -o hello.exe -Xllvm -sil-disable-pass=let-property-lowering
error: compile command failed due to exception 5 (use -v to see invocation)
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/Users/hiroshi/AppData/Local/Programs/Swift/Toolchains/0.0.0+Asserts/usr/bin/swift-frontend.exe -frontend -c -primary-file C:\\Users\\hiroshi\\hello.swift -target aarch64-unknown-windows-msvc -Xllvm -aarch64-use-tbi -disable-objc-interop -sdk C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Platforms\\0.0.0\\Windows.platform\\Developer\\SDKs\\Windows.sdk -color-diagnostics -empty-abi-descriptor -Xcc -working-directory -Xcc C:\\Users\\hiroshi -resource-dir C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\lib\\swift -Xllvm -sil-disable-pass=let-property-lowering -module-name hello -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\local\\bin -o C:\\Users\\hiroshi\\AppData\\Local\\Temp\\TemporaryDirectory.NyD3OE\\hello-1.o
1.      Swift version 6.0-dev (LLVM 6a4cb0f4db7bec7, Swift 76d5dd44894ccb0)
2.      Compiling with effective version 5.10
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for hello)
4.      While running pass #8 SILFunctionTransform "BooleanLiteralFolding" on SILFunction "@main".
Exception Code: 0xC0000005
 #0 0x00007fff7b03ad64 swift_retain (C:\Users\hiroshi\AppData\Local\Programs\Swift\Runtimes\0.0.0\usr\bin\swiftCore.dll+0x2bad64)
 #1 0x00007ff6f9fcaca4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x17aca4)
 #2 0x00007ff6f9e7530c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x2530c)
 #3 0x00007ff6f9e67bd8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x17bd8)
 #4 0x00007ff6faa3a660 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbea660)
 #5 0x00007ff6faa57e84 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc07e84)
 #6 0x00007ff6faa56d98 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc06d98)
 #7 0x00007ff6faa50388 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00388)
 #8 0x00007ff6faa506e8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc006e8)
 #9 0x00007ff6faa50064 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00064)
#10 0x00007ff6faaa3820 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc53820)
#11 0x00007ff6faa47b8c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbf7b8c)
#12 0x00007ff6faa5076c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc0076c)
#13 0x00007ff6faa3a74c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbea74c)
#14 0x00007ff6fa4973f0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6473f0)
#15 0x00007ff6fa22da54 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dda54)
#16 0x00007ff6fa22e620 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3de620)
#17 0x00007ff6fa2239cc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3d39cc)
#18 0x00007ff6fa234e78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3e4e78)
#19 0x00007ff6fa22d494 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd494)
#20 0x00007ff6fa22d710 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd710)
#21 0x00007ff6fa22f5c0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3df5c0)
#22 0x00007ff6fa1bf3e4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f3e4)
#23 0x00007ff6fa1bef78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36ef78)
#24 0x00007ff7000bac78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626ac78)
#25 0x00007ff7000bad14 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626ad14)
#26 0x00007ff84ce12310 (C:\Windows\System32\KERNEL32.DLL+0x12310)
#27 0x00007ff84f395b2c (C:\Windows\SYSTEM32\ntdll.dll+0x75b2c)

@eeckstein
Copy link
Contributor

Also, can you printf the integer value of the silstage in BridgedPassContext::getSILStage() to see if the problem is in the bridging or in the switch on the swift side.

@hjyamauchi
Copy link
Contributor Author

I'd be happy to help debug further but does it seem like we want to have this PR merged for now (once my local testing passes)? @eeckstein

@eeckstein
Copy link
Contributor

It segfaults in BooleanLiteralFolding:

Interesting. BooleanLiteralFolding runs before LetPropertyLowering

@eeckstein
Copy link
Contributor

I'd be happy to help debug further but does it seem like we want to have this PR merged for now (once my local testing passes)?

Yes, you can merge it

@hjyamauchi
Copy link
Contributor Author

The integer value of the silstage is -1583311848 (0xa1a09418) as follows. It looks like a miscompile of some sort.

>swiftc hello.swift -o hello.exe
error: compile command failed due to exception 29 (use -v to see invocation)
_bridged.getSILStage() SILStage(rawValue: -1583311848)
invocation->getPassManager()->getModule()->getStage() -1583311848
invocation->getPassManager()->getModule()->getStage() -1583311848
Optimizer/Context.swift:43: Fatal error: unhandled SILStage case
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/Users/hiroshi/AppData/Local/Programs/Swift/Toolchains/0.0.0+Asserts/usr/bin/swift-frontend.exe -frontend -c -primary-file C:\\Users\\hiroshi\\hello.swift -target aarch64-unknown-windows-msvc -Xllvm -aarch64-use-tbi -disable-objc-interop -sdk C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Platforms\\0.0.0\\Windows.platform\\Developer\\SDKs\\Windows.sdk -color-diagnostics -empty-abi-descriptor -Xcc -working-directory -Xcc C:\\Users\\hiroshi -resource-dir C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\lib\\swift -module-name hello -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\local\\bin -o C:\\Users\\hiroshi\\AppData\\Local\\Temp\\TemporaryDirectory.0GdIKi\\hello-1.o
1.      Swift version 6.0-dev (LLVM 6a4cb0f4db7bec7, Swift 76d5dd44894ccb0)
2.      Compiling with effective version 5.10
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for hello)
4.      While running pass #10 SILFunctionTransform "LetPropertyLowering" on SILFunction "@main".
Exception Code: 0xC000001D
 #0 0x00007fffde6c56a4 $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF (C:\Users\hiroshi\AppData\Local\Programs\Swift\Runtimes\0.0.0\usr\bin\swiftCore.dll+0x156a4)
 #1 0x00007ff6a197c378 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xfc378)
 #2 0x00007ff6a18b5364 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x35364)
 #3 0x00007ff6a1897ba8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x17ba8)
 #4 0x00007ff6a246ac58 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbeac58)
 #5 0x00007ff6a2488554 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc08554)
 #6 0x00007ff6a2487468 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc07468)
 #7 0x00007ff6a2480980 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00980)
 #8 0x00007ff6a2480ce0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00ce0)
 #9 0x00007ff6a248065c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc0065c)
#10 0x00007ff6a24d3f08 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc53f08)
#11 0x00007ff6a2478184 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbf8184)
#12 0x00007ff6a2480d64 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc00d64)
#13 0x00007ff6a246ad44 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbead44)
#14 0x00007ff6a1ec7590 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x647590)
#15 0x00007ff6a1c5dbf4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3ddbf4)
#16 0x00007ff6a1c5e7c0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3de7c0)
#17 0x00007ff6a1c53b6c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3d3b6c)
#18 0x00007ff6a1c65018 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3e5018)
#19 0x00007ff6a1c5d634 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd634)
#20 0x00007ff6a1c5d8b0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd8b0)
#21 0x00007ff6a1c5f760 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3df760)
#22 0x00007ff6a1bef584 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f584)
#23 0x00007ff6a1bef118 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f118)
#24 0x00007ff6a7aecf90 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626cf90)
#25 0x00007ff6a7aed02c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x626d02c)
#26 0x00007ff84ce12310 (C:\Windows\System32\KERNEL32.DLL+0x12310)
#27 0x00007ff84f395b2c (C:\Windows\SYSTEM32\ntdll.dll+0x75b2c)

@hjyamauchi
Copy link
Contributor Author

hjyamauchi commented Jun 21, 2024

As my local testing of this PR was successful, I'll try to merge this.

@hjyamauchi
Copy link
Contributor Author

@swift-ci Please test

@eeckstein
Copy link
Contributor

The integer value of the silstage is -1583311848 (0xa1a09418) as follows.

Thanks! It looks like the swiftPassInvocation address (= the context) gets messed up somewhere in the call chain. Can you do one more experiment? Print the pass-invocation address in all involved functions:

diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
index 2f1e5d3cec5..1ac36550979 100644
--- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
@@ -42,6 +42,8 @@ import SIL
 let letPropertyLowering = FunctionPass(name: "let-property-lowering") {
   (function: Function, context: FunctionPassContext) in
 
+  print("letPropertyLowering: ", context)
+
   assert(context.silStage == .raw, "let-property-lowering must run before RawSILInstLowering")
 
   if context.hadError {
diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
index dbd483d136a..6e2aaa02012 100644
--- a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
@@ -69,7 +69,7 @@ private func registerSwiftPasses() {
   registerPass(allocVectorLowering, { allocVectorLowering.run($0) })
   registerPass(asyncDemotion, { asyncDemotion.run($0) })
   registerPass(booleanLiteralFolding, { booleanLiteralFolding.run($0) })
-  registerPass(letPropertyLowering, { letPropertyLowering.run($0) })
+  registerPass(letPropertyLowering, { print("runClosure: ", $0.passContext); letPropertyLowering.run($0) })
   registerPass(mergeCondFailsPass, { mergeCondFailsPass.run($0) })
   registerPass(computeEscapeEffects, { computeEscapeEffects.run($0) })
   registerPass(computeSideEffects, { computeSideEffects.run($0) })
diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
index 64f4156713a..833d3d5b987 100644
--- a/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
@@ -24,6 +24,7 @@ struct FunctionPass {
   }
 
   func run(_ bridgedCtxt: BridgedFunctionPassCtxt) {
+    print("run: ", bridgedCtxt.passContext)
     let function = bridgedCtxt.function.function
     let context = FunctionPassContext(_bridged: bridgedCtxt.passContext)
     runFunction(function, context)
diff --git a/include/swift/SILOptimizer/OptimizerBridgingImpl.h b/include/swift/SILOptimizer/OptimizerBridgingImpl.h
index 9b49a24a270..a7b67e25d15 100644
--- a/include/swift/SILOptimizer/OptimizerBridgingImpl.h
+++ b/include/swift/SILOptimizer/OptimizerBridgingImpl.h
@@ -165,6 +165,7 @@ void BridgedPassContext::notifyDependencyOnBodyOf(BridgedFunction otherFunction)
 }
 
 BridgedPassContext::SILStage BridgedPassContext::getSILStage() const {
+  llvm::dbgs() << "getSILStage: " << invocation << "\n";
   return (SILStage)invocation->getPassManager()->getModule()->getStage();
 }
 
diff --git a/lib/SILOptimizer/PassManager/PassManager.cpp b/lib/SILOptimizer/PassManager/PassManager.cpp
index e5daecc2242..7f1d5909990 100644
--- a/lib/SILOptimizer/PassManager/PassManager.cpp
+++ b/lib/SILOptimizer/PassManager/PassManager.cpp
@@ -698,6 +698,8 @@ void SILPassManager::runPassOnFunction(unsigned TransIdx, SILFunction *F) {
   for (unsigned runIdx = 0; runIdx < numRepeats; runIdx++) {
     swiftPassInvocation.startFunctionPassRun(SFT);
 
+    llvm::dbgs() << "runPassOnFn: " << &swiftPassInvocation << "\n";
+
     // Run it!
     SFT->run();

@eeckstein eeckstein merged commit d50aaf4 into swiftlang:main Jun 24, 2024
5 checks passed
@hjyamauchi
Copy link
Contributor Author

Thanks for merging this. Yes, I'm rebuilding it with your experiment patch.

@hjyamauchi
Copy link
Contributor Author

@eeckstein This is what I get with the patch:

>swiftc hello.swift -o hello.exe
error: compile command failed due to exception 29 (use -v to see invocation)
run:  BridgedPassContext(invocation: 0x0000002277989078)
run:  BridgedPassContext(invocation: 0x0000002277989078)
run:  BridgedPassContext(invocation: 0x0000002277989078)
runClosure:  BridgedPassContext(invocation: 0x0000002277989078)
run:  BridgedPassContext(invocation: 0x0000002277989078)
letPropertyLowering:  FunctionPassContext(_bridged: __C.BridgedPassContext(invocation: 0x0000002277989078))
_bridged.getSILStage() SILStage(rawValue: 1421252304)
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
runPassOnFn: 0x2277989078
getSILStage: 0x2277989078
getSILStage: 0x2277989078
Optimizer/Context.swift:43: Fatal error: unhandled SILStage case
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/Users/hiroshi/AppData/Local/Programs/Swift/Toolchains/0.0.0+Asserts/usr/bin/swift-frontend.exe -frontend -c -primary-file C:\\Users\\hiroshi\\hello.swift -target aarch64-unknown-windows-msvc -Xllvm -aarch64-use-tbi -disable-objc-interop -sdk C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Platforms\\0.0.0\\Windows.platform\\Developer\\SDKs\\Windows.sdk -color-diagnostics -empty-abi-descriptor -Xcc -working-directory -Xcc C:\\Users\\hiroshi -resource-dir C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\lib\\swift -module-name hello -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\local\\bin -o C:\\Users\\hiroshi\\AppData\\Local\\Temp\\TemporaryDirectory.eQUV7p\\hello-1.o
1.      Swift version 6.0-dev (LLVM 6a4cb0f4db7bec7, Swift 76d5dd44894ccb0)
2.      Compiling with effective version 5.10
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for hello)
4.      While running pass #10 SILFunctionTransform "LetPropertyLowering" on SILFunction "@main".
Exception Code: 0xC000001D
 #0 0x00007fff96af56a4 $ss17_assertionFailure__4file4line5flagss5NeverOs12StaticStringV_SSAHSus6UInt32VtF (C:\Users\hiroshi\AppData\Local\Programs\Swift\Runtimes\0.0.0\usr\bin\swiftCore.dll+0x156a4)
 #1 0x00007ff754adc540 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xfc540)
 #2 0x00007ff754a1553c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3553c)
 #3 0x00007ff754b4172c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x16172c)
 #4 0x00007ff7555cc3b8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbec3b8)
 #5 0x00007ff7555e9edc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc09edc)
 #6 0x00007ff7555e8d20 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc08d20)
 #7 0x00007ff7555e2248 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc02248)
 #8 0x00007ff7555e25a8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc025a8)
 #9 0x00007ff7555e1f24 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc01f24)
#10 0x00007ff755635900 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc55900)
#11 0x00007ff7555d9a4c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbf9a4c)
#12 0x00007ff7555e262c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc0262c)
#13 0x00007ff7555cc4a4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbec4a4)
#14 0x00007ff755027f60 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x647f60)
#15 0x00007ff754dbdebc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3ddebc)
#16 0x00007ff754dbea88 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dea88)
#17 0x00007ff754db3e34 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3d3e34)
#18 0x00007ff754dc52e0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3e52e0)
#19 0x00007ff754dbd8fc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd8fc)
#20 0x00007ff754dbdb78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3ddb78)
#21 0x00007ff754dbfa28 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dfa28)
#22 0x00007ff754d4f814 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f814)
#23 0x00007ff754d4f3a8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f3a8)
#24 0x00007ff75ac58c88 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6278c88)
#25 0x00007ff75ac58d24 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6278d24)
#26 0x00007ff84ce12310 (C:\Windows\System32\KERNEL32.DLL+0x12310)
#27 0x00007ff84f395b2c (C:\Windows\SYSTEM32\ntdll.dll+0x75b2c)

With -sil-disable-pass=let-property-lowering

>swiftc hello.swift -o hello.exe -Xllvm -sil-disable-pass=let-property-lowering
error: compile command failed due to exception 5 (use -v to see invocation)
run:  BridgedPassContext(invocation: 0x000000d94b588ee8)
run:  BridgedPassContext(invocation: 0x000000d94b588ee8)
run:  BridgedPassContext(invocation: 0x000000d94b588ee8)
run:  BridgedPassContext(invocation: 0x000000d94b588ee8)
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
runPassOnFn: 0xd94b588ee8
Please submit a bug report (https://swift.org/contributing/#reporting-bugs) and include the crash backtrace.
Stack dump:
0.      Program arguments: C:/Users/hiroshi/AppData/Local/Programs/Swift/Toolchains/0.0.0+Asserts/usr/bin/swift-frontend.exe -frontend -c -primary-file C:\\Users\\hiroshi\\hello.swift -target aarch64-unknown-windows-msvc -Xllvm -aarch64-use-tbi -disable-objc-interop -sdk C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Platforms\\0.0.0\\Windows.platform\\Developer\\SDKs\\Windows.sdk -color-diagnostics -empty-abi-descriptor -Xcc -working-directory -Xcc C:\\Users\\hiroshi -resource-dir C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\lib\\swift -Xllvm -sil-disable-pass=let-property-lowering -module-name hello -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\bin -plugin-path C:\\Users\\hiroshi\\AppData\\Local\\Programs\\Swift\\Toolchains\\0.0.0+Asserts\\usr\\local\\bin -o C:\\Users\\hiroshi\\AppData\\Local\\Temp\\TemporaryDirectory.hclmvT\\hello-1.o
1.      Swift version 6.0-dev (LLVM 6a4cb0f4db7bec7, Swift 76d5dd44894ccb0)
2.      Compiling with effective version 5.10
3.      While evaluating request ExecuteSILPipelineRequest(Run pipelines { Mandatory Diagnostic Passes + Enabling Optimization Passes } on SIL for hello)
4.      While running pass #23 SILFunctionTransform "LifetimeDependenceDiagnostics" on SILFunction "@main".
Exception Code: 0xC0000005
 #0 0x00007ff755d82f84 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x13a2f84)
 #1 0x00007ff7555e5834 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc05834)
 #2 0x00007ff754a174f0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x374f0)
 #3 0x00007ff754b4172c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x16172c)
 #4 0x00007ff7555cc3b8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbec3b8)
 #5 0x00007ff7555e9edc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc09edc)
 #6 0x00007ff7555e8d20 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc08d20)
 #7 0x00007ff7555e2248 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc02248)
 #8 0x00007ff7555e25a8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc025a8)
 #9 0x00007ff7555e1f24 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc01f24)
#10 0x00007ff755635900 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc55900)
#11 0x00007ff7555d9a4c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbf9a4c)
#12 0x00007ff7555e262c (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xc0262c)
#13 0x00007ff7555cc4a4 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0xbec4a4)
#14 0x00007ff755027f60 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x647f60)
#15 0x00007ff754dbdebc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3ddebc)
#16 0x00007ff754dbea88 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dea88)
#17 0x00007ff754db3e34 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3d3e34)
#18 0x00007ff754dc52e0 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3e52e0)
#19 0x00007ff754dbd8fc (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dd8fc)
#20 0x00007ff754dbdb78 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3ddb78)
#21 0x00007ff754dbfa28 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x3dfa28)
#22 0x00007ff754d4f814 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f814)
#23 0x00007ff754d4f3a8 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x36f3a8)
#24 0x00007ff75ac58c88 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6278c88)
#25 0x00007ff75ac58d24 (C:\Users\hiroshi\AppData\Local\Programs\Swift\Toolchains\0.0.0+Asserts\usr\bin\swift-frontend.exe+0x6278d24)
#26 0x00007ff84ce12310 (C:\Windows\System32\KERNEL32.DLL+0x12310)
#27 0x00007ff84f395b2c (C:\Windows\SYSTEM32\ntdll.dll+0x75b2c)

The patch

diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
index 2f1e5d3cec5..1ac36550979 100644
--- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LetPropertyLowering.swift
@@ -42,6 +42,8 @@ import SIL
 let letPropertyLowering = FunctionPass(name: "let-property-lowering") {
   (function: Function, context: FunctionPassContext) in

+  print("letPropertyLowering: ", context)
+
   assert(context.silStage == .raw, "let-property-lowering must run before RawSILInstLowering")

   if context.hadError {
diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift
index 48f8aa73f69..7927bd397d3 100644
--- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceDiagnostics.swift
@@ -29,6 +29,11 @@ private func log(prefix: Bool = true, _ message: @autoclosure () -> String) {
 let lifetimeDependenceDiagnosticsPass = FunctionPass(
   name: "lifetime-dependence-diagnostics")
 { (function: Function, context: FunctionPassContext) in
+#if os(Windows)
+  if !context.options.hasFeature(.NonescapableTypes) {
+    return
+  }
+#endif
   log(prefix: false, "\n--- Diagnosing lifetime dependence in \(function.name)")
   log("\(function)")

diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceInsertion.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceInsertion.swift
index 40af4a7886e..f171d7588b8 100644
--- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceInsertion.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceInsertion.swift
@@ -31,6 +31,11 @@ private func log(prefix: Bool = true, _ message: @autoclosure () -> String) {
 let lifetimeDependenceInsertionPass = FunctionPass(
   name: "lifetime-dependence-insertion")
 { (function: Function, context: FunctionPassContext) in
+#if os(Windows)
+  if !context.options.hasFeature(.NonescapableTypes) {
+    return
+  }
+#endif
   log(prefix: false, "\n--- Inserting lifetime dependence markers in \(function.name)")

   for instruction in function.instructions {
diff --git a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceScopeFixup.swift b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceScopeFixup.swift
index dd528bcb17c..fdc6390f300 100644
--- a/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceScopeFixup.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/FunctionPasses/LifetimeDependenceScopeFixup.swift
@@ -31,6 +31,11 @@ private func log(prefix: Bool = true, _ message: @autoclosure () -> String) {
 let lifetimeDependenceScopeFixupPass = FunctionPass(
   name: "lifetime-dependence-scope-fixup")
 { (function: Function, context: FunctionPassContext) in
+#if os(Windows)
+  if !context.options.hasFeature(.NonescapableTypes) {
+    return
+  }
+#endif
   log(prefix: false, "\n--- Scope fixup for lifetime dependence in \(function.name)")

   let localReachabilityCache = LocalVariableReachabilityCache()
diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift
index 3b4b4bc46a3..def607849fc 100644
--- a/SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/Context.swift
@@ -35,6 +35,7 @@ extension Context {
   var hadError: Bool { _bridged.hadError() }

   var silStage: SILStage {
+    print("_bridged.getSILStage() \(_bridged.getSILStage())");
     switch _bridged.getSILStage() {
       case .Raw:       return .raw
       case .Canonical: return .canonical
diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
index dbd483d136a..6e2aaa02012 100644
--- a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift
@@ -69,7 +69,7 @@ private func registerSwiftPasses() {
   registerPass(allocVectorLowering, { allocVectorLowering.run($0) })
   registerPass(asyncDemotion, { asyncDemotion.run($0) })
   registerPass(booleanLiteralFolding, { booleanLiteralFolding.run($0) })
-  registerPass(letPropertyLowering, { letPropertyLowering.run($0) })
+  registerPass(letPropertyLowering, { print("runClosure: ", $0.passContext); letPropertyLowering.run($0) })
   registerPass(mergeCondFailsPass, { mergeCondFailsPass.run($0) })
   registerPass(computeEscapeEffects, { computeEscapeEffects.run($0) })
   registerPass(computeSideEffects, { computeSideEffects.run($0) })
diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
index 64f4156713a..833d3d5b987 100644
--- a/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
+++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/Passes.swift
@@ -24,6 +24,7 @@ struct FunctionPass {
   }

   func run(_ bridgedCtxt: BridgedFunctionPassCtxt) {
+    print("run: ", bridgedCtxt.passContext)
     let function = bridgedCtxt.function.function
     let context = FunctionPassContext(_bridged: bridgedCtxt.passContext)
     runFunction(function, context)
diff --git a/include/swift/SILOptimizer/OptimizerBridgingImpl.h b/include/swift/SILOptimizer/OptimizerBridgingImpl.h
index 9b49a24a270..be63330900a 100644
--- a/include/swift/SILOptimizer/OptimizerBridgingImpl.h
+++ b/include/swift/SILOptimizer/OptimizerBridgingImpl.h
@@ -165,6 +165,8 @@ void BridgedPassContext::notifyDependencyOnBodyOf(BridgedFunction otherFunction)
 }

 BridgedPassContext::SILStage BridgedPassContext::getSILStage() const {
+  llvm::dbgs() << "getSILStage: " << invocation << "\n";
+  //llvm::errs() << "invocation->getPassManager()->getModule()->getStage() " << (int)(invocation->getPassManager()->getModule()->getStage()) << "\n";
   return (SILStage)invocation->getPassManager()->getModule()->getStage();
 }

diff --git a/lib/SILOptimizer/PassManager/PassManager.cpp b/lib/SILOptimizer/PassManager/PassManager.cpp
index f4a63e82237..1f0d4e79a85 100644
--- a/lib/SILOptimizer/PassManager/PassManager.cpp
+++ b/lib/SILOptimizer/PassManager/PassManager.cpp
@@ -697,6 +697,8 @@ void SILPassManager::runPassOnFunction(unsigned TransIdx, SILFunction *F) {
   for (unsigned runIdx = 0; runIdx < numRepeats; runIdx++) {
     swiftPassInvocation.startFunctionPassRun(SFT);

+    llvm::dbgs() << "runPassOnFn: " << &swiftPassInvocation << "\n";
+
     // Run it!
     SFT->run();

where the checkout is at head

commit 76d5dd44894ccb097556a88642b81c01371325db (HEAD, m/main, github/main)
Merge: 70c54bb7398 afa66b1a6b3
Author: Pavel Yaskevich <[email protected]>
Date:   Thu Jun 20 09:54:39 2024 -0700

    Merge pull request #72857 from li3zhen1/fix-init-accessor-71578

    [AccessRequests] Allow Init accessor to be `internal`

@eeckstein
Copy link
Contributor

Thanks! looks like the passInvocation pointer is fine. If you are motivated you can try to track down why we are getting the wrong value of sil-stage. E.g. is the SILModule pointer valid, etc.

@hjyamauchi
Copy link
Contributor Author

Yeah I'll see what I can do!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants