Aquí hay un archivo C simple con una definición de enumeración y una mainfunció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
}
%2evidentemente es la dvariable, a la que se le asignan 2. ¿A qué %1corresponde 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 returndeclaración por completo (que es legal mainen C y equivalente a return 0;).
mainlo int main(int argc, char **argv)que ves argcy lo argvcopias en la pila, pero la misteriosa variable cero sigue ahí además de ellas.