我很难将旧的C ++ Builder 10.2项目升级到10.2.3(我们在64位PC上使用Clang编译器,32位应用程序)。
10.2.3安装正常(在干净的Windows 10 PC上), - 项目编译和链接 - 到目前为止每个人都很高兴。
但是,当在调试器中运行应用程序时,我可以看到MainForm的this
指针(由于历史原因,一个相当大的对象)在单个方法调用调用中突然变为垃圾(在调用时)它自己的一个方法 - 就在构造函数完成之后)导致一个关键的失败。
我试图为特定方法注释__fastcall
调用约定,然后调试器更进一步,但随后__fastcall
使用this
在下一个方法调用中崩溃指针损坏(我们有1000多个方法使用__fastcall
,所以将它们全部注释不是一个选项)。
有没有人知道发生了什么?
一个新的Clang编译器开关,可能吗?
大对象问题?
我还试图在10.2.3中从零开始构建一个全新的项目 - 但没有运气 - 同样奇怪的事情发生了。
答案 0 :(得分:3)
这是Clang编译器中的已知错误,已经向Embarcadero报告过:
RSP-12769: bcc32c have problems with __fastcall calling convention
RSP-20171: Tokyo 10.2.3 clang destroys this pointer if stack is large
RSP-20173: BCC32C parameter corruption with more than 4KB of data on a stack frame
Embarcadero的CodeCentral提供了10.2.3东京Clang编译器的补丁:
ID: 30834, C++Builder 10.2.3 C++ Compiler 4k Stack Allocation Patch