2

我很难将我们的旧 C++Builder 10.2 项目升级到 10.2.3(我们在 64 位 PC 上使用 Clang 编译器,32 位应用程序)。

10.2.3 安装顺利(在干净的 Windows 10 PC 上), - 项目编译和链接 - 到目前为止,每个人都很开心。

但是,当在调试器中运行应用程序时,我可以看到thisMainForm 的指针(由于历史原因,一个相当大的对象)在单个方法调用调用中突然变为垃圾(当调用它自己的方法之一时 - 就在构造函数完成),这会导致严重的失败。

我试图注释掉__fastcall特定方法的调用约定,然后调试器走得更远,但是__fastcall由于this指针损坏(我们有 1000 多个方法__fastcall,所以将它们全部注释掉)不是一个选项)。

有谁知道发生了什么?

也许是一个新的 Clang 编译器开关?

大物体的问题?

我还尝试在 10.2.3 中从头开始构建一个全新的项目 - 但没有运气 - 同样奇怪的事情发生了。

4

1 回答 1

3

这是 Clang 编译器中的一个已知错误,已向 Embarcadero 报告:

RSP-12769:bcc32c 的 __fastcall 调用约定有问题

RSP-20171:如果堆栈很大,Tokyo 10.2.3 clang 会破坏此指针

RSP-20173:BCC32C 参数损坏,堆栈帧上的数据超过 4KB

Embarcadero 的 CodeCentral 上提供了 10.2.3 Tokyo 中 Clang 编译器的补丁:

ID:30834,C++Builder 10.2.3 C++ 编译器 4k 堆栈分配补丁

于 2018-05-17T19:34:59.923 回答