отладка промежуточного кода gcc низкого уровня - PullRequest
0 голосов
/ 22 мая 2019

В связи с этот вопрос У меня есть еще один вопрос.

Мне удалось воспроизвести его, и я не копирую и вставляю код здесь снова, так как вы можете найти код. Я вставляю только вывод компиляции на мой компьютер.

% 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

Хотелось бы мне понять, на каком этапе компилятор обнаруживает такого рода проблемы с библиотекой. Я знаю, что код преобразуется во множество промежуточных языков, таких как generic, gimple, ssa, rtl, комбинаторы и т. Д., И т. Д., Но я не знаю, в каком из этих представлений код проверяется на наличие проблем, подобных этой, из этой команды компиляции .

Если я хочу отладить промежуточные представления и обнаружить наличие этой проблемы, какие параметры я должен передать gcc, чтобы он как можно быстрее останавливал генерацию промежуточных языков, прежде чем это предупреждение будет сгенерировано?

1 Ответ

2 голосов
/ 22 мая 2019

Ваша ошибка / предупреждение, кажется, происходит от здесь . Если я правильно понимаю, это из фазы создания формы SSA.

Также этот вопрос может содержать полезные советы о том, как вывести различные промежуточные представления для gcc. Я знаю, как это сделать для clang, но, похоже, ваша проблема связана с gcc.

...