Aquí hay un archivo C simple con una definición de enumeración y una main
función:
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
Se transmite al siguiente LLVM IR:
define dso_local i32 @main() #0 {
%1 = alloca i32, align 4
%2 = alloca i32, align 4
store i32 0, i32* %1, align 4
store i32 2, i32* %2, align 4
ret i32 0
}
%2
evidentemente es la d
variable, a la que se le asignan 2. ¿A qué %1
corresponde si se devuelve cero directamente?
clang-9 -S -emit-llvm simple.c
main
( godbolt.org/z/kEtS-s ). El enlace muestra cómo se asigna el ensamblado a la fuente
main
, la misteriosa variable adicional desaparece. Curiosamente, también desaparece si omite la return
declaración por completo (que es legal main
en C y equivalente a return 0;
).
main
lo int main(int argc, char **argv)
que ves argc
y lo argv
copias en la pila, pero la misteriosa variable cero sigue ahí además de ellas.