C-调试低级GCC中间代码表示



与这个问题有关,我还有另一个问题。

我设法重现了它,并且不再在此处复制粘贴代码,因为您可以找到代码。我仅在计算机上粘贴编译的输出。

% gcc -std=c11 -O3 -g -Wall -Wextra -Werror -USUPPRESS_BUG  -c  msg_gcc.c
msg_gcc.c: In function 'function_under_test':
msg_gcc.c:30:9: error: 'strncpy' output may be truncated copying 128 bytes from a string of length 128 [-Werror=stringop-truncation]
         strncpy(name, name_in_queue, SERVERNAME_LEN);
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
-root-@ @...| test | stub
% gcc --version
gcc (GCC) 8.2.1 20181127
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-root-@ @...| test | stub
% cat /proc/version
Linux version 5.0.7-arch1-1-ARCH (builduser@heftig-20167) (gcc version 8.2.1 20181127 (GCC)) #1 SMP PREEMPT Mon Apr 8 10:37:08 UTC 2019
-root-@ @...| test | stub

我希望我能理解编译器在哪个阶段检测到此类库问题的哪个阶段。我知道该代码在许多中间语言中进行了转换,例如通用,gimple,ssa,rtl,Combinators等,但我不知道这些代码中的哪一个是从此汇编命令中查看此类问题的。。

如果我想调试中间表示形式并发现此问题的存在,我应该通过什么参数传递GCC,以便在此警告生成之前尽可能靠近中间语言的生成?

您的错误/警告似乎是从这里起源的。如果我正确理解,这是来自SSA形式生成阶段的。

此外,这个问题可能会提供有关如何转储gcc不同中间表示的有用提示。我知道如何为clang做到这一点,但是您的问题似乎是特定于gcc的。

最新更新