如何深入理解 gcc 编译器?

How to understand IN DEPTH gcc compiler?

这个问题的背景:我想了解编译器是如何工作的。我学到了很多新东西:scanner、parser、AST、IR、optimization、frontend、backend、LL(1),...我逐渐进步,这很有趣。现在,我想做一些实际的工作。
从程序员的角度来看,我知道为什么 typedef struct { int x; mytype* next; } mytype; 无法编译并且我知道正确的语法 typedef struct mystruct { int x; struct mystruct* next; } mytype; 但我想知道问题出在哪里 EXACTLY在编译期间。我正在使用 gcc,我想知道如何使用 gcc 开发人员选项 -fdump-... 来回答这个问题。

GCC编译器工作的第一步是解析器

c-parser.c 

它将您的 c 或 c++ 或其他代码解析为 gimple 表示:

Parse -> Gimplify -> Tree -> SSA -> Optimize -> Generate -> RTL -> Optimize RTL Generate -> ASM

可以找到错误,例如,在终端中,或者在 IDE 中的错误输出中,如下所示:

gcc yourcode.c
yourcode.c:2:25: error: unknown type name 'mytype'
 typedef struct { int x; mytype* next; } mytype;
                         ^~~~~~

您还可以通过 link

对不起我的英语。