Berikut adalah file C sederhana dengan definisi enum dan main
fungsi:
enum days {MON, TUE, WED, THU};
int main() {
enum days d;
d = WED;
return 0;
}
Ini mentranspile ke LLVM IR berikut:
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
jelas d
variabel, yang mendapat 2 ditugaskan untuk itu. Apa yang %1
berhubungan dengan jika nol dikembalikan secara langsung?
clang-9 -S -emit-llvm simple.c
main
( godbolt.org/z/kEtS-s ). Tautan menunjukkan bagaimana perakitan dipetakan ke sumber
main
, variabel ekstra misterius menghilang. Menariknya, itu juga menghilang jika Anda menghilangkan return
pernyataan sepenuhnya (yang legal untuk main
dalam C dan setara dengan return 0;
).
main
seperti yang int main(int argc, char **argv)
Anda lihat argc
dan argv
disalin ke tumpukan, tetapi variabel nol misterius masih ada di samping mereka.