ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
https://ziglang.org
MIT License
34.73k stars 2.53k forks source link

`"builtin"` package declarations are always emitted #17781

Closed alichraghi closed 3 days ago

alichraghi commented 1 year ago

Zig Version

0.12.0-dev.1286+cc394431a

Steps to Reproduce and Observed Behavior

zig build-obj -femit-asm=empty.asm empty.zig
cat empty.asm
``` .text .intel_syntax noprefix .file "test" .file 1 "/home/ali/clone/zig/lib/std" "builtin.zig" .file 2 "/home/ali/dev/zig/zig-cache/o/922647fe99816061788478d4c9e53776" "builtin.zig" .file 3 "/home/ali/clone/zig/lib/std" "target.zig" .file 4 "/home/ali/clone/zig/lib/std/target" "x86.zig" .file 5 "/home/ali/clone/zig/lib/std" "start.zig" .type builtin.zig_backend,@object .section .rodata.cst4,"aM",@progbits,4 .p2align 2, 0x0 builtin.zig_backend: .long 2 .size builtin.zig_backend, 4 .type target.Target.Cpu.Feature.Set.empty,@object .section .rodata,"a",@progbits .p2align 3, 0x0 target.Target.Cpu.Feature.Set.empty: .zero 40 .size target.Target.Cpu.Feature.Set.empty, 40 .type target.x86.cpu.x86_64,@object .p2align 3, 0x0 target.x86.cpu.x86_64: .quad __anon_452 .quad 6 .quad __anon_455 .quad 6 .quad 149533581377552 .quad 551367491584 .quad 1168232153472 .quad 0 .quad 0 .size target.x86.cpu.x86_64, 72 .type __anon_452,@object .data __anon_452: .asciz "x86_64" .size __anon_452, 7 .type __anon_455,@object __anon_455: .asciz "x86-64" .size __anon_455, 7 .type builtin.cpu,@object .section .rodata,"a",@progbits .p2align 3, 0x0 builtin.cpu: .quad target.x86.cpu.x86_64 .quad 149533581377552 .quad 551367491584 .quad 1168232677760 .quad 0 .quad 0 .byte 37 .zero 7 .size builtin.cpu, 56 .type start.simplified_logic,@object start.simplified_logic: .byte 0 .size start.simplified_logic, 1 .type builtin.output_mode,@object builtin.output_mode: .byte 2 .size builtin.output_mode, 1 .section .debug_abbrev,"",@progbits .byte 1 .byte 17 .byte 1 .byte 37 .byte 14 .byte 19 .byte 5 .byte 3 .byte 14 .byte 16 .byte 23 .byte 27 .byte 14 .ascii "\264B" .byte 25 .byte 0 .byte 0 .byte 2 .byte 52 .byte 0 .byte 3 .byte 14 .byte 73 .byte 19 .byte 58 .byte 11 .byte 59 .byte 11 .byte 110 .byte 14 .byte 0 .byte 0 .byte 3 .byte 4 .byte 1 .byte 73 .byte 19 .byte 3 .byte 14 .byte 11 .byte 11 .byte 58 .byte 11 .byte 59 .byte 5 .ascii "\210\001" .byte 15 .byte 0 .byte 0 .byte 4 .byte 40 .byte 0 .byte 3 .byte 14 .byte 28 .byte 15 .byte 0 .byte 0 .byte 5 .byte 36 .byte 0 .byte 3 .byte 14 .byte 62 .byte 11 .byte 11 .byte 11 .byte 0 .byte 0 .byte 6 .byte 52 .byte 0 .byte 3 .byte 14 .byte 73 .byte 19 .byte 58 .byte 11 .byte 59 .byte 5 .byte 110 .byte 14 .byte 0 .byte 0 .byte 7 .byte 19 .byte 1 .byte 3 .byte 14 .byte 11 .byte 11 .ascii "\210\001" .byte 15 .byte 0 .byte 0 .byte 8 .byte 13 .byte 0 .byte 3 .byte 14 .byte 73 .byte 19 .ascii "\210\001" .byte 15 .byte 56 .byte 11 .byte 0 .byte 0 .byte 9 .byte 1 .byte 1 .byte 73 .byte 19 .byte 0 .byte 0 .byte 10 .byte 33 .byte 0 .byte 73 .byte 19 .byte 55 .byte 11 .byte 0 .byte 0 .byte 11 .byte 36 .byte 0 .byte 3 .byte 14 .byte 11 .byte 11 .byte 62 .byte 11 .byte 0 .byte 0 .byte 12 .byte 15 .byte 0 .byte 73 .byte 19 .byte 3 .byte 14 .byte 0 .byte 0 .byte 0 .section .debug_info,"",@progbits .Lcu_begin0: .long .Ldebug_info_end0-.Ldebug_info_start0 .Ldebug_info_start0: .short 4 .long .debug_abbrev .byte 8 .byte 1 .long .Linfo_string0 .short 12 .long .Linfo_string1 .long .Lline_table_start0 .long .Linfo_string2 .byte 2 .long .Linfo_string3 .long 45 .byte 2 .byte 6 .long .Linfo_string18 .byte 3 .long 132 .long .Linfo_string17 .byte 4 .byte 1 .short 965 .byte 4 .byte 4 .long .Linfo_string5 .byte 0 .byte 4 .long .Linfo_string6 .byte 1 .byte 4 .long .Linfo_string7 .byte 2 .byte 4 .long .Linfo_string8 .byte 3 .byte 4 .long .Linfo_string9 .byte 4 .byte 4 .long .Linfo_string10 .byte 5 .byte 4 .long .Linfo_string11 .byte 6 .byte 4 .long .Linfo_string12 .byte 7 .byte 4 .long .Linfo_string13 .byte 8 .byte 4 .long .Linfo_string14 .byte 9 .byte 4 .long .Linfo_string15 .byte 10 .byte 4 .long .Linfo_string16 .byte 11 .byte 0 .byte 5 .long .Linfo_string4 .byte 7 .byte 4 .byte 6 .long .Linfo_string19 .long 155 .byte 3 .short 713 .long .Linfo_string24 .byte 7 .long .Linfo_string23 .byte 40 .byte 8 .byte 8 .long .Linfo_string20 .long 174 .byte 8 .byte 0 .byte 0 .byte 9 .long 186 .byte 10 .long 193 .byte 5 .byte 0 .byte 5 .long .Linfo_string21 .byte 7 .byte 8 .byte 11 .long .Linfo_string22 .byte 8 .byte 7 .byte 6 .long .Linfo_string25 .long 216 .byte 4 .short 3811 .long .Linfo_string35 .byte 7 .long .Linfo_string34 .byte 72 .byte 8 .byte 8 .long .Linfo_string26 .long 257 .byte 8 .byte 0 .byte 8 .long .Linfo_string32 .long 257 .byte 8 .byte 16 .byte 8 .long .Linfo_string33 .long 155 .byte 8 .byte 32 .byte 0 .byte 7 .long .Linfo_string31 .byte 16 .byte 8 .byte 8 .long .Linfo_string27 .long 287 .byte 8 .byte 0 .byte 8 .long .Linfo_string30 .long 186 .byte 8 .byte 8 .byte 0 .byte 12 .long 296 .long .Linfo_string29 .byte 5 .long .Linfo_string28 .byte 7 .byte 1 .byte 2 .long .Linfo_string36 .long 318 .byte 2 .byte 13 .long .Linfo_string103 .byte 7 .long .Linfo_string102 .byte 56 .byte 8 .byte 8 .long .Linfo_string37 .long 740 .byte 8 .byte 0 .byte 8 .long .Linfo_string33 .long 155 .byte 8 .byte 8 .byte 8 .long .Linfo_string39 .long 358 .byte 1 .byte 48 .byte 3 .long 749 .long .Linfo_string101 .byte 1 .byte 3 .short 3132 .byte 1 .byte 4 .long .Linfo_string41 .byte 0 .byte 4 .long .Linfo_string42 .byte 1 .byte 4 .long .Linfo_string43 .byte 2 .byte 4 .long .Linfo_string44 .byte 3 .byte 4 .long .Linfo_string45 .byte 4 .byte 4 .long .Linfo_string46 .byte 5 .byte 4 .long .Linfo_string47 .byte 6 .byte 4 .long .Linfo_string48 .byte 7 .byte 4 .long .Linfo_string49 .byte 8 .byte 4 .long .Linfo_string50 .byte 9 .byte 4 .long .Linfo_string51 .byte 10 .byte 4 .long .Linfo_string52 .byte 11 .byte 4 .long .Linfo_string53 .byte 12 .byte 4 .long .Linfo_string54 .byte 13 .byte 4 .long .Linfo_string55 .byte 14 .byte 4 .long .Linfo_string56 .byte 15 .byte 4 .long .Linfo_string57 .byte 16 .byte 4 .long .Linfo_string58 .byte 17 .byte 4 .long .Linfo_string59 .byte 18 .byte 4 .long .Linfo_string60 .byte 19 .byte 4 .long .Linfo_string61 .byte 20 .byte 4 .long .Linfo_string62 .byte 21 .byte 4 .long .Linfo_string63 .byte 22 .byte 4 .long .Linfo_string64 .byte 23 .byte 4 .long .Linfo_string65 .byte 24 .byte 4 .long .Linfo_string66 .byte 25 .byte 4 .long .Linfo_string67 .byte 26 .byte 4 .long .Linfo_string68 .byte 27 .byte 4 .long .Linfo_string69 .byte 28 .byte 4 .long .Linfo_string70 .byte 29 .byte 4 .long .Linfo_string71 .byte 30 .byte 4 .long .Linfo_string72 .byte 31 .byte 4 .long .Linfo_string73 .byte 32 .byte 4 .long .Linfo_string74 .byte 33 .byte 4 .long .Linfo_string75 .byte 34 .byte 4 .long .Linfo_string76 .byte 35 .byte 4 .long .Linfo_string77 .byte 36 .byte 4 .long .Linfo_string25 .byte 37 .byte 4 .long .Linfo_string78 .byte 38 .byte 4 .long .Linfo_string79 .byte 39 .byte 4 .long .Linfo_string80 .byte 40 .byte 4 .long .Linfo_string81 .byte 41 .byte 4 .long .Linfo_string82 .byte 42 .byte 4 .long .Linfo_string83 .byte 43 .byte 4 .long .Linfo_string84 .byte 44 .byte 4 .long .Linfo_string85 .byte 45 .byte 4 .long .Linfo_string86 .byte 46 .byte 4 .long .Linfo_string87 .byte 47 .byte 4 .long .Linfo_string88 .byte 48 .byte 4 .long .Linfo_string89 .byte 49 .byte 4 .long .Linfo_string90 .byte 50 .byte 4 .long .Linfo_string91 .byte 51 .byte 4 .long .Linfo_string92 .byte 52 .byte 4 .long .Linfo_string93 .byte 53 .byte 4 .long .Linfo_string94 .byte 54 .byte 4 .long .Linfo_string95 .byte 55 .byte 4 .long .Linfo_string96 .byte 56 .byte 4 .long .Linfo_string97 .byte 57 .byte 4 .long .Linfo_string98 .byte 58 .byte 4 .long .Linfo_string99 .byte 59 .byte 4 .long .Linfo_string100 .byte 60 .byte 0 .byte 0 .byte 12 .long 216 .long .Linfo_string38 .byte 5 .long .Linfo_string40 .byte 7 .byte 1 .byte 2 .long .Linfo_string104 .long 771 .byte 5 .byte 19 .long .Linfo_string106 .byte 5 .long .Linfo_string105 .byte 2 .byte 1 .byte 2 .long .Linfo_string107 .long 793 .byte 2 .byte 8 .long .Linfo_string113 .byte 3 .long 826 .long .Linfo_string112 .byte 1 .byte 1 .short 636 .byte 1 .byte 4 .long .Linfo_string109 .byte 0 .byte 4 .long .Linfo_string110 .byte 1 .byte 4 .long .Linfo_string111 .byte 2 .byte 0 .byte 5 .long .Linfo_string108 .byte 7 .byte 1 .byte 0 .Ldebug_info_end0: .section .debug_str,"MS",@progbits,1 .Linfo_string0: .asciz "zig 0.12.0" .Linfo_string1: .asciz "test" .Linfo_string2: .asciz "/home/ali/dev/zig" .Linfo_string3: .asciz "zig_backend" .Linfo_string4: .asciz "u32" .Linfo_string5: .asciz "other" .Linfo_string6: .asciz "stage1" .Linfo_string7: .asciz "stage2_llvm" .Linfo_string8: .asciz "stage2_c" .Linfo_string9: .asciz "stage2_wasm" .Linfo_string10: .asciz "stage2_arm" .Linfo_string11: .asciz "stage2_x86_64" .Linfo_string12: .asciz "stage2_aarch64" .Linfo_string13: .asciz "stage2_x86" .Linfo_string14: .asciz "stage2_riscv64" .Linfo_string15: .asciz "stage2_sparc64" .Linfo_string16: .asciz "stage2_spirv64" .Linfo_string17: .asciz "builtin.CompilerBackend" .Linfo_string18: .asciz "builtin.zig_backend" .Linfo_string19: .asciz "empty" .Linfo_string20: .asciz "ints" .Linfo_string21: .asciz "usize" .Linfo_string22: .asciz "__ARRAY_SIZE_TYPE__" .Linfo_string23: .asciz "target.Target.Cpu.Feature.Set" .Linfo_string24: .asciz "target.Target.Cpu.Feature.Set.empty" .Linfo_string25: .asciz "x86_64" .Linfo_string26: .asciz "name" .Linfo_string27: .asciz "ptr" .Linfo_string28: .asciz "u8" .Linfo_string29: .asciz "*u8" .Linfo_string30: .asciz "len" .Linfo_string31: .asciz "[]u8" .Linfo_string32: .asciz "llvm_name" .Linfo_string33: .asciz "features" .Linfo_string34: .asciz "target.Target.Cpu.Model" .Linfo_string35: .asciz "target.x86.cpu.x86_64" .Linfo_string36: .asciz "cpu" .Linfo_string37: .asciz "model" .Linfo_string38: .asciz "*target.Target.Cpu.Model" .Linfo_string39: .asciz "arch" .Linfo_string40: .asciz "u6" .Linfo_string41: .asciz "arm" .Linfo_string42: .asciz "armeb" .Linfo_string43: .asciz "aarch64" .Linfo_string44: .asciz "aarch64_be" .Linfo_string45: .asciz "aarch64_32" .Linfo_string46: .asciz "arc" .Linfo_string47: .asciz "avr" .Linfo_string48: .asciz "bpfel" .Linfo_string49: .asciz "bpfeb" .Linfo_string50: .asciz "csky" .Linfo_string51: .asciz "dxil" .Linfo_string52: .asciz "hexagon" .Linfo_string53: .asciz "loongarch32" .Linfo_string54: .asciz "loongarch64" .Linfo_string55: .asciz "m68k" .Linfo_string56: .asciz "mips" .Linfo_string57: .asciz "mipsel" .Linfo_string58: .asciz "mips64" .Linfo_string59: .asciz "mips64el" .Linfo_string60: .asciz "msp430" .Linfo_string61: .asciz "powerpc" .Linfo_string62: .asciz "powerpcle" .Linfo_string63: .asciz "powerpc64" .Linfo_string64: .asciz "powerpc64le" .Linfo_string65: .asciz "r600" .Linfo_string66: .asciz "amdgcn" .Linfo_string67: .asciz "riscv32" .Linfo_string68: .asciz "riscv64" .Linfo_string69: .asciz "sparc" .Linfo_string70: .asciz "sparc64" .Linfo_string71: .asciz "sparcel" .Linfo_string72: .asciz "s390x" .Linfo_string73: .asciz "tce" .Linfo_string74: .asciz "tcele" .Linfo_string75: .asciz "thumb" .Linfo_string76: .asciz "thumbeb" .Linfo_string77: .asciz "x86" .Linfo_string78: .asciz "xcore" .Linfo_string79: .asciz "xtensa" .Linfo_string80: .asciz "nvptx" .Linfo_string81: .asciz "nvptx64" .Linfo_string82: .asciz "le32" .Linfo_string83: .asciz "le64" .Linfo_string84: .asciz "amdil" .Linfo_string85: .asciz "amdil64" .Linfo_string86: .asciz "hsail" .Linfo_string87: .asciz "hsail64" .Linfo_string88: .asciz "spir" .Linfo_string89: .asciz "spir64" .Linfo_string90: .asciz "spirv32" .Linfo_string91: .asciz "spirv64" .Linfo_string92: .asciz "kalimba" .Linfo_string93: .asciz "shave" .Linfo_string94: .asciz "lanai" .Linfo_string95: .asciz "wasm32" .Linfo_string96: .asciz "wasm64" .Linfo_string97: .asciz "renderscript32" .Linfo_string98: .asciz "renderscript64" .Linfo_string99: .asciz "ve" .Linfo_string100: .asciz "spu_2" .Linfo_string101: .asciz "target.Target.Cpu.Arch" .Linfo_string102: .asciz "target.Target.Cpu" .Linfo_string103: .asciz "builtin.cpu" .Linfo_string104: .asciz "simplified_logic" .Linfo_string105: .asciz "bool" .Linfo_string106: .asciz "start.simplified_logic" .Linfo_string107: .asciz "output_mode" .Linfo_string108: .asciz "u2" .Linfo_string109: .asciz "Exe" .Linfo_string110: .asciz "Lib" .Linfo_string111: .asciz "Obj" .Linfo_string112: .asciz "builtin.OutputMode" .Linfo_string113: .asciz "builtin.output_mode" .section .debug_pubnames,"",@progbits .long .LpubNames_end0-.LpubNames_start0 .LpubNames_start0: .short 2 .long .Lcu_begin0 .long 834 .long 30 .asciz "zig_backend" .long 59 .asciz "other" .long 65 .asciz "stage1" .long 71 .asciz "stage2_llvm" .long 77 .asciz "stage2_c" .long 83 .asciz "stage2_wasm" .long 89 .asciz "stage2_arm" .long 95 .asciz "stage2_x86_64" .long 101 .asciz "stage2_aarch64" .long 107 .asciz "stage2_x86" .long 113 .asciz "stage2_riscv64" .long 119 .asciz "stage2_sparc64" .long 125 .asciz "stage2_spirv64" .long 139 .asciz "empty" .long 200 .asciz "x86_64" .long 303 .asciz "cpu" .long 756 .asciz "simplified_logic" .long 778 .asciz "output_mode" .long 807 .asciz "Exe" .long 813 .asciz "Lib" .long 819 .asciz "Obj" .long 0 .LpubNames_end0: .section .debug_pubtypes,"",@progbits .long .LpubTypes_end0-.LpubTypes_start0 .LpubTypes_start0: .short 2 .long .Lcu_begin0 .long 834 .long 45 .asciz "builtin.CompilerBackend" .long 132 .asciz "u32" .long 155 .asciz "target.Target.Cpu.Feature.Set" .long 186 .asciz "usize" .long 216 .asciz "target.Target.Cpu.Model" .long 257 .asciz "[]u8" .long 287 .asciz "*u8" .long 296 .asciz "u8" .long 318 .asciz "target.Target.Cpu" .long 740 .asciz "*target.Target.Cpu.Model" .long 749 .asciz "u6" .long 771 .asciz "bool" .long 793 .asciz "builtin.OutputMode" .long 826 .asciz "u2" .long 0 .LpubTypes_end0: .section ".note.GNU-stack","",@progbits .section .debug_line,"",@progbits .Lline_table_start0: ```

Expected Behavior

Zig should ignore unreferenced declarations. This is currently a blocker for spirv backend which needs to disallow generic pointers in vulkan platform

alichraghi commented 3 days ago

Closing as duplicate of #21827