diff --git a/cmake/Findclang.cmake b/cmake/Findclang.cmake index 71a6753e8c..c0b7d6cd2e 100644 --- a/cmake/Findclang.cmake +++ b/cmake/Findclang.cmake @@ -8,14 +8,14 @@ find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h PATHS - /usr/lib/llvm-3.7/include + /usr/lib/llvm-3.8/include /mingw64/include) macro(FIND_AND_ADD_CLANG_LIB _libname_) string(TOUPPER ${_libname_} _prettylibname_) find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} PATHS - /usr/lib/llvm-3.7/lib + /usr/lib/llvm-3.8/lib /mingw64/lib) if(CLANG_${_prettylibname_}_LIB) set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB}) diff --git a/cmake/Findllvm.cmake b/cmake/Findllvm.cmake index 87ba991eb1..66a18560a9 100644 --- a/cmake/Findllvm.cmake +++ b/cmake/Findllvm.cmake @@ -7,7 +7,7 @@ # LLVM_LIBRARIES # LLVM_LIBDIRS -find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.7) +find_program(LLVM_CONFIG_EXE NAMES llvm-config llvm-config-3.8) execute_process( COMMAND ${LLVM_CONFIG_EXE} --libs diff --git a/src/analyze.cpp b/src/analyze.cpp index df63796074..7055fffb08 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -658,9 +658,7 @@ TypeTableEntry *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) { fn_type->data.fn.raw_type_ref = LLVMFunctionType(gen_return_type->type_ref, gen_param_types, gen_param_index, fn_type_id->is_var_args); fn_type->type_ref = LLVMPointerType(fn_type->data.fn.raw_type_ref, 0); - LLVMZigDIFile *di_file = nullptr; - fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, di_file, - param_di_types, gen_param_index + 1, 0); + fn_type->di_type = LLVMZigCreateSubroutineType(g->dbuilder, param_di_types, gen_param_index + 1, 0); g->fn_type_table.put(&fn_type->data.fn.fn_type_id, fn_type); @@ -997,7 +995,7 @@ static void resolve_function_proto(CodeGen *g, AstNode *node, FnTableEntry *fn_t import->block_context->di_scope, buf_ptr(&fn_table_entry->symbol_name), "", import->di_file, line_number, fn_type->di_type, fn_table_entry->internal_linkage, - is_definition, scope_line, flags, is_optimized, fn_table_entry->fn_value); + is_definition, scope_line, flags, is_optimized, nullptr); BlockContext *context = new_block_context(fn_table_entry->fn_def_node, import->block_context); fn_table_entry->fn_def_node->data.fn_def.block_context = context; diff --git a/src/codegen.cpp b/src/codegen.cpp index b1edd1b4f9..49d257b6d8 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -3216,21 +3216,18 @@ static void do_code_gen(CodeGen *g) { continue; } - unsigned tag; - unsigned arg_no; TypeTableEntry *gen_type; if (var->block_context->node->type == NodeTypeFnDef) { - tag = LLVMZigTag_DW_arg_variable(); - arg_no = var->gen_arg_index + 1; - var->is_ptr = false; assert(var->gen_arg_index >= 0); var->value_ref = LLVMGetParam(fn, var->gen_arg_index); gen_type = fn_table_entry->type_entry->data.fn.gen_param_info[var->src_arg_index].type; + + var->di_loc_var = LLVMZigCreateParameterVariable(g->dbuilder, var->block_context->di_scope, + buf_ptr(&var->name), import->di_file, var->decl_node->line + 1, + gen_type->di_type, !g->strip_debug_symbols, 0, var->gen_arg_index + 1); } else { - tag = LLVMZigTag_DW_auto_variable(); - arg_no = 0; add_debug_source_node(g, var->decl_node); var->value_ref = LLVMBuildAlloca(g->builder, var->type->type_ref, buf_ptr(&var->name)); @@ -3238,12 +3235,11 @@ static void do_code_gen(CodeGen *g) { LLVMSetAlignment(var->value_ref, align_bytes); gen_type = var->type; - } - var->di_loc_var = LLVMZigCreateLocalVariable(g->dbuilder, tag, - var->block_context->di_scope, buf_ptr(&var->name), - import->di_file, var->decl_node->line + 1, - gen_type->di_type, !g->strip_debug_symbols, 0, arg_no); + var->di_loc_var = LLVMZigCreateAutoVariable(g->dbuilder, var->block_context->di_scope, + buf_ptr(&var->name), import->di_file, var->decl_node->line + 1, + gen_type->di_type, !g->strip_debug_symbols, 0); + } } // create debug variable declarations for parameters diff --git a/src/parseh.cpp b/src/parseh.cpp index e7b2f1ea42..0b2eb68c3b 100644 --- a/src/parseh.cpp +++ b/src/parseh.cpp @@ -370,6 +370,17 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const case BuiltinType::OCLImage1dBuffer: case BuiltinType::OCLImage2d: case BuiltinType::OCLImage2dArray: + case BuiltinType::OCLImage2dArrayDepth: + case BuiltinType::OCLImage2dDepth: + case BuiltinType::OCLImage2dMSAA: + case BuiltinType::OCLImage2dArrayMSAA: + case BuiltinType::OCLImage2dMSAADepth: + case BuiltinType::OCLImage2dArrayMSAADepth: + case BuiltinType::OCLClkEvent: + case BuiltinType::OCLQueue: + case BuiltinType::OCLNDRange: + case BuiltinType::OCLReserveID: + case BuiltinType::OMPArraySection: case BuiltinType::OCLImage3d: case BuiltinType::OCLSampler: case BuiltinType::OCLEvent: @@ -626,6 +637,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const case Type::Complex: case Type::ObjCObjectPointer: case Type::Atomic: + case Type::Pipe: emit_warning(c, decl, "missed a '%s' type", ty->getTypeClassName()); return c->codegen->builtin_types.entry_invalid; } @@ -1598,9 +1610,9 @@ int parse_h_file(ImportTableEntry *import, ZigList *errors, const ch std::unique_ptr ast_unit(ASTUnit::LoadFromCommandLine( &clang_argv.at(0), &clang_argv.last(), pch_container_ops, diags, resources_path, - only_local_decls, capture_diagnostics, None, true, false, TU_Complete, + only_local_decls, capture_diagnostics, None, true, 0, TU_Complete, false, false, allow_pch_with_compiler_errors, skip_function_bodies, - user_files_are_volatile, false, &err_unit)); + user_files_are_volatile, false, None, &err_unit)); // Early failures in LoadFromCommandLine may return with ErrUnit unset. diff --git a/src/target.cpp b/src/target.cpp index 19507ec9cd..07a7bb0098 100644 --- a/src/target.cpp +++ b/src/target.cpp @@ -12,12 +12,14 @@ #include static const ArchType arch_list[] = { + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_2a}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s}, + {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7k}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m}, {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k}, @@ -29,6 +31,7 @@ static const ArchType arch_list[] = { {ZigLLVM_armeb, ZigLLVM_NoSubArch}, {ZigLLVM_aarch64, ZigLLVM_NoSubArch}, {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch}, + {ZigLLVM_avr, ZigLLVM_NoSubArch}, {ZigLLVM_bpfel, ZigLLVM_NoSubArch}, {ZigLLVM_bpfeb, ZigLLVM_NoSubArch}, {ZigLLVM_hexagon, ZigLLVM_NoSubArch}, @@ -84,6 +87,7 @@ static const ZigLLVM_VendorType vendor_list[] = { ZigLLVM_MipsTechnologies, ZigLLVM_NVIDIA, ZigLLVM_CSR, + ZigLLVM_Myriad, }; static const ZigLLVM_OSType os_list[] = { @@ -112,6 +116,9 @@ static const ZigLLVM_OSType os_list[] = { ZigLLVM_NVCL, ZigLLVM_AMDHSA, ZigLLVM_PS4, + ZigLLVM_ELFIAMCU, + ZigLLVM_TvOS, + ZigLLVM_WatchOS, }; static const ZigLLVM_EnvironmentType environ_list[] = { @@ -126,6 +133,8 @@ static const ZigLLVM_EnvironmentType environ_list[] = { ZigLLVM_MSVC, ZigLLVM_Itanium, ZigLLVM_Cygnus, + ZigLLVM_AMDOpenCL, + ZigLLVM_CoreCLR, }; int target_arch_count(void) { @@ -293,12 +302,13 @@ void resolve_target_object_format(ZigTarget *target) { target->oformat = ZigLLVM_ELF; } - +// See lib/Support/Triple.cpp in LLVM for the source of this data. static int get_arch_pointer_bit_width(ZigLLVM_ArchType arch) { switch (arch) { case ZigLLVM_UnknownArch: return 0; + case ZigLLVM_avr: case ZigLLVM_msp430: return 16; @@ -408,6 +418,9 @@ int get_c_type_size_in_bits(const ZigTarget *target, CIntType id) { case ZigLLVM_NVCL: case ZigLLVM_AMDHSA: case ZigLLVM_PS4: + case ZigLLVM_ELFIAMCU: + case ZigLLVM_TvOS: + case ZigLLVM_WatchOS: zig_panic("TODO c type size in bits for this target"); } zig_unreachable(); diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 47cfdedb28..74615d5ea6 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -307,7 +307,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type, } LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped, - LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags) + LLVMZigDIType **types_array, int types_array_len, unsigned flags) { SmallVector types; for (int i = 0; i < types_array_len; i += 1) { @@ -316,7 +316,6 @@ LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped, } DIBuilder *dibuilder = reinterpret_cast(dibuilder_wrapped); DISubroutineType *subroutine_type = dibuilder->createSubroutineType( - reinterpret_cast(file), dibuilder->getOrCreateTypeArray(types), flags); DIType *ditype = subroutine_type; @@ -351,12 +350,8 @@ unsigned LLVMZigLang_DW_LANG_C99(void) { return dwarf::DW_LANG_C99; } -unsigned LLVMZigTag_DW_auto_variable(void) { - return dwarf::DW_TAG_auto_variable; -} - -unsigned LLVMZigTag_DW_arg_variable(void) { - return dwarf::DW_TAG_arg_variable; +unsigned LLVMZigTag_DW_variable(void) { + return dwarf::DW_TAG_variable; } unsigned LLVMZigTag_DW_structure_type(void) { @@ -385,21 +380,34 @@ LLVMZigDILexicalBlock *LLVMZigCreateLexicalBlock(LLVMZigDIBuilder *dbuilder, LLV return reinterpret_cast(result); } - -LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag, +LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder, LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no, - LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no) + LLVMZigDIType *type, bool always_preserve, unsigned flags) { - DILocalVariable *result = reinterpret_cast(dbuilder)->createLocalVariable( - tag, + DILocalVariable *result = reinterpret_cast(dbuilder)->createAutoVariable( reinterpret_cast(scope), name, reinterpret_cast(file), line_no, reinterpret_cast(type), always_preserve, - flags, - arg_no); + flags); + return reinterpret_cast(result); +} + +LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder, + LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no, + LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no) +{ + DILocalVariable *result = reinterpret_cast(dbuilder)->createParameterVariable( + reinterpret_cast(scope), + name, + arg_no, + reinterpret_cast(file), + line_no, + reinterpret_cast(type), + always_preserve, + flags); return reinterpret_cast(result); } @@ -447,9 +455,8 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope, const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno, LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line, - unsigned flags, bool is_optimized, LLVMValueRef function) + unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram) { - Function *unwrapped_function = reinterpret_cast(unwrap(function)); DISubroutineType *di_sub_type = static_cast(reinterpret_cast(fn_di_type)); DISubprogram *result = reinterpret_cast(dibuilder)->createFunction( reinterpret_cast(scope), @@ -457,7 +464,9 @@ LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigD reinterpret_cast(file), lineno, di_sub_type, - is_local_to_unit, is_definition, scope_line, flags, is_optimized, unwrapped_function); + is_local_to_unit, is_definition, scope_line, flags, is_optimized, + nullptr, + reinterpret_cast(decl_subprogram)); return reinterpret_cast(result); } @@ -509,7 +518,7 @@ void LLVMZigSetFastMath(LLVMBuilderRef builder_wrapped, bool on_state) { if (on_state) { FastMathFlags fmf; fmf.setUnsafeAlgebra(); - unwrap(builder_wrapped)->SetFastMathFlags(fmf); + unwrap(builder_wrapped)->setFastMathFlags(fmf); } else { unwrap(builder_wrapped)->clearFastMathFlags(); } @@ -563,6 +572,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) { switch (sub_arch) { case ZigLLVM_NoSubArch: return "(none)"; + case ZigLLVM_ARMSubArch_v8_2a: + return "v8_2a"; case ZigLLVM_ARMSubArch_v8_1a: return "v8_1a"; case ZigLLVM_ARMSubArch_v8: @@ -575,6 +586,8 @@ const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) { return "v7m"; case ZigLLVM_ARMSubArch_v7s: return "v7s"; + case ZigLLVM_ARMSubArch_v7k: + return "v7k"; case ZigLLVM_ARMSubArch_v6: return "v6"; case ZigLLVM_ARMSubArch_v6m: @@ -626,51 +639,8 @@ enum FloatAbi { FloatAbiSoftFp, }; -static int get_arm_sub_arch_version(const Triple &triple) { - return ARMTargetParser::parseArchVersion(triple.getArchName()); -} - static FloatAbi get_float_abi(const Triple &triple) { - switch (triple.getOS()) { - case Triple::Darwin: - case Triple::MacOSX: - case Triple::IOS: - if (get_arm_sub_arch_version(triple) == 6 || - get_arm_sub_arch_version(triple) == 7) - { - return FloatAbiSoftFp; - } else { - return FloatAbiSoft; - } - case Triple::Win32: - return FloatAbiHard; - case Triple::FreeBSD: - switch (triple.getEnvironment()) { - case Triple::GNUEABIHF: - return FloatAbiHard; - default: - return FloatAbiSoft; - } - default: - switch (triple.getEnvironment()) { - case Triple::GNUEABIHF: - return FloatAbiHard; - case Triple::GNUEABI: - return FloatAbiSoftFp; - case Triple::EABIHF: - return FloatAbiHard; - case Triple::EABI: - return FloatAbiSoftFp; - case Triple::Android: - if (get_arm_sub_arch_version(triple) == 7) { - return FloatAbiSoftFp; - } else { - return FloatAbiSoft; - } - default: - return FloatAbiSoft; - } - } + zig_panic("TODO implement get_float_abi for ARM"); } Buf *get_dynamic_linker(LLVMTargetMachineRef target_machine_ref) { diff --git a/src/zig_llvm.hpp b/src/zig_llvm.hpp index 319fda360f..feb0e74125 100644 --- a/src/zig_llvm.hpp +++ b/src/zig_llvm.hpp @@ -87,7 +87,7 @@ void LLVMZigReplaceDebugArrays(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *type, LLVMZigDIType **types_array, int types_array_len); LLVMZigDIType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped, - LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags); + LLVMZigDIType **types_array, int types_array_len, unsigned flags); unsigned LLVMZigEncoding_DW_ATE_unsigned(void); unsigned LLVMZigEncoding_DW_ATE_signed(void); @@ -96,8 +96,7 @@ unsigned LLVMZigEncoding_DW_ATE_boolean(void); unsigned LLVMZigEncoding_DW_ATE_unsigned_char(void); unsigned LLVMZigEncoding_DW_ATE_signed_char(void); unsigned LLVMZigLang_DW_LANG_C99(void); -unsigned LLVMZigTag_DW_auto_variable(void); -unsigned LLVMZigTag_DW_arg_variable(void); +unsigned LLVMZigTag_DW_variable(void); unsigned LLVMZigTag_DW_structure_type(void); LLVMZigDIBuilder *LLVMZigCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved); @@ -110,7 +109,11 @@ LLVMZigDIScope *LLVMZigFileToScope(LLVMZigDIFile *difile); LLVMZigDIScope *LLVMZigSubprogramToScope(LLVMZigDISubprogram *subprogram); LLVMZigDIScope *LLVMZigTypeToScope(LLVMZigDIType *type); -LLVMZigDILocalVariable *LLVMZigCreateLocalVariable(LLVMZigDIBuilder *dbuilder, unsigned tag, +LLVMZigDILocalVariable *LLVMZigCreateAutoVariable(LLVMZigDIBuilder *dbuilder, + LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no, + LLVMZigDIType *type, bool always_preserve, unsigned flags); + +LLVMZigDILocalVariable *LLVMZigCreateParameterVariable(LLVMZigDIBuilder *dbuilder, LLVMZigDIScope *scope, const char *name, LLVMZigDIFile *file, unsigned line_no, LLVMZigDIType *type, bool always_preserve, unsigned flags, unsigned arg_no); @@ -127,7 +130,7 @@ LLVMZigDIFile *LLVMZigCreateFile(LLVMZigDIBuilder *dibuilder, const char *filena LLVMZigDISubprogram *LLVMZigCreateFunction(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope, const char *name, const char *linkage_name, LLVMZigDIFile *file, unsigned lineno, LLVMZigDIType *fn_di_type, bool is_local_to_unit, bool is_definition, unsigned scope_line, - unsigned flags, bool is_optimized, LLVMValueRef function); + unsigned flags, bool is_optimized, LLVMZigDISubprogram *decl_subprogram); void LLVMZigDIBuilderFinalize(LLVMZigDIBuilder *dibuilder); @@ -152,6 +155,7 @@ enum ZigLLVM_ArchType { ZigLLVM_armeb, // ARM (big endian): armeb ZigLLVM_aarch64, // AArch64 (little endian): aarch64 ZigLLVM_aarch64_be, // AArch64 (big endian): aarch64_be + ZigLLVM_avr, // AVR: Atmel AVR microcontroller ZigLLVM_bpfel, // eBPF or extended BPF or 64-bit BPF (little endian) ZigLLVM_bpfeb, // eBPF or extended BPF or 64-bit BPF (big endian) ZigLLVM_hexagon, // Hexagon: hexagon @@ -177,8 +181,8 @@ enum ZigLLVM_ArchType { ZigLLVM_xcore, // XCore: xcore ZigLLVM_nvptx, // NVPTX: 32-bit ZigLLVM_nvptx64, // NVPTX: 64-bit - ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl / Emscripten) - ZigLLVM_le64, // le64: generic little-endian 64-bit CPU (PNaCl / Emscripten) + ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl) + ZigLLVM_le64, // le64: generic little-endian 64-bit CPU (PNaCl) ZigLLVM_amdil, // AMDIL ZigLLVM_amdil64, // AMDIL with 64-bit pointers ZigLLVM_hsail, // AMD HSAIL @@ -196,12 +200,14 @@ enum ZigLLVM_ArchType { enum ZigLLVM_SubArchType { ZigLLVM_NoSubArch, + ZigLLVM_ARMSubArch_v8_2a, ZigLLVM_ARMSubArch_v8_1a, ZigLLVM_ARMSubArch_v8, ZigLLVM_ARMSubArch_v7, ZigLLVM_ARMSubArch_v7em, ZigLLVM_ARMSubArch_v7m, ZigLLVM_ARMSubArch_v7s, + ZigLLVM_ARMSubArch_v7k, ZigLLVM_ARMSubArch_v6, ZigLLVM_ARMSubArch_v6m, ZigLLVM_ARMSubArch_v6k, @@ -228,8 +234,9 @@ enum ZigLLVM_VendorType { ZigLLVM_MipsTechnologies, ZigLLVM_NVIDIA, ZigLLVM_CSR, + ZigLLVM_Myriad, - ZigLLVM_LastVendorType = ZigLLVM_CSR + ZigLLVM_LastVendorType = ZigLLVM_Myriad }; enum ZigLLVM_OSType { ZigLLVM_UnknownOS, @@ -258,8 +265,11 @@ enum ZigLLVM_OSType { ZigLLVM_NVCL, // NVIDIA OpenCL ZigLLVM_AMDHSA, // AMD HSA Runtime ZigLLVM_PS4, + ZigLLVM_ELFIAMCU, + ZigLLVM_TvOS, // Apple tvOS + ZigLLVM_WatchOS, // Apple watchOS - ZigLLVM_LastOSType = ZigLLVM_PS4 + ZigLLVM_LastOSType = ZigLLVM_WatchOS }; enum ZigLLVM_EnvironmentType { ZigLLVM_UnknownEnvironment, @@ -276,8 +286,9 @@ enum ZigLLVM_EnvironmentType { ZigLLVM_MSVC, ZigLLVM_Itanium, ZigLLVM_Cygnus, - - ZigLLVM_LastEnvironmentType = ZigLLVM_Cygnus, + ZigLLVM_AMDOpenCL, + ZigLLVM_CoreCLR, + ZigLLVM_LastEnvironmentType = ZigLLVM_CoreCLR }; enum ZigLLVM_ObjectFormatType { ZigLLVM_UnknownObjectFormat,