我有一个开放的 Fortran MPI 代码,在不使用优化标志的情况下编译和运行不会出现错误。当我设置 -O1 标志时,执行时出现分段错误错误。导致此问题的唯一优化标志是
-ftoplevel-reorder
。
您能否直观地解释一下该标志的作用以及发现代码中的错误(如果有)的最佳策略是什么?
来自 https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
-fno-toplevel-重新排序
不要重新排序顶级函数、变量和 asm 语句。按照它们在输入文件中出现的顺序输出它们。使用此选项时,不会删除未引用的静态变量。此选项旨在支持依赖于特定顺序的现有代码。对于新代码,最好尽可能使用属性。
在-O0级别启用。当显式禁用时,它还意味着 -fno-section-anchors,否则在某些目标上的 -O0 处启用。
您可能会越界访问数组,并且根据局部变量在堆栈上的放置方式,后果从不明显到致命崩溃。