diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/clang.zig | 9 | ||||
| -rw-r--r-- | src/clang_options_data.zig | 270 | ||||
| -rw-r--r-- | src/codegen/llvm.zig | 18 | ||||
| -rw-r--r-- | src/codegen/llvm/bindings.zig | 6 | ||||
| -rw-r--r-- | src/target.zig | 12 | ||||
| -rw-r--r-- | src/translate_c.zig | 2 | ||||
| -rw-r--r-- | src/zig_clang.cpp | 44 | ||||
| -rw-r--r-- | src/zig_clang.h | 7 | ||||
| -rw-r--r-- | src/zig_clang_cc1_main.cpp | 3 | ||||
| -rw-r--r-- | src/zig_clang_cc1as_main.cpp | 32 | ||||
| -rw-r--r-- | src/zig_clang_driver.cpp | 125 | ||||
| -rw-r--r-- | src/zig_llvm-ar.cpp | 53 | ||||
| -rw-r--r-- | src/zig_llvm.cpp | 32 | ||||
| -rw-r--r-- | src/zig_llvm.h | 4 |
14 files changed, 448 insertions, 169 deletions
diff --git a/src/clang.zig b/src/clang.zig index a3a364c0ec..04261f06f0 100644 --- a/src/clang.zig +++ b/src/clang.zig @@ -662,8 +662,8 @@ pub const MacroQualifiedType = opaque { }; pub const TypeOfType = opaque { - pub const getUnderlyingType = ZigClangTypeOfType_getUnderlyingType; - extern fn ZigClangTypeOfType_getUnderlyingType(*const TypeOfType) QualType; + pub const getUnmodifiedType = ZigClangTypeOfType_getUnmodifiedType; + extern fn ZigClangTypeOfType_getUnmodifiedType(*const TypeOfType) QualType; }; pub const TypeOfExprType = opaque { @@ -1199,6 +1199,7 @@ const StmtClass = enum(c_int) { OMPCriticalDirectiveClass, OMPDepobjDirectiveClass, OMPDispatchDirectiveClass, + OMPErrorDirectiveClass, OMPFlushDirectiveClass, OMPInteropDirectiveClass, OMPDistributeDirectiveClass, @@ -1303,6 +1304,7 @@ const StmtClass = enum(c_int) { CXXNewExprClass, CXXNoexceptExprClass, CXXNullPtrLiteralExprClass, + CXXParenListInitExprClass, CXXPseudoDestructorExprClass, CXXRewrittenBinaryOperatorClass, CXXScalarValueInitExprClass, @@ -1484,11 +1486,13 @@ pub const DeclKind = enum(c_int) { FileScopeAsm, Friend, FriendTemplate, + ImplicitConceptSpecialization, Import, LifetimeExtendedTemporary, LinkageSpec, Using, UsingEnum, + HLSLBuffer, Label, Namespace, NamespaceAlias, @@ -1557,6 +1561,7 @@ pub const DeclKind = enum(c_int) { PragmaDetectMismatch, RequiresExprBody, StaticAssert, + TopLevelStmt, TranslationUnit, }; diff --git a/src/clang_options_data.zig b/src/clang_options_data.zig index 7cee0327bf..364cce52fb 100644 --- a/src/clang_options_data.zig +++ b/src/clang_options_data.zig @@ -1126,6 +1126,14 @@ flagpsl("MT"), .psl = true, }, .{ + .name = "arm64EC", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = false, + .psl = true, +}, +.{ .name = "await", .syntax = .flag, .zig_equivalent = .other, @@ -1254,6 +1262,14 @@ flagpsl("MT"), .psl = true, }, .{ + .name = "fp:contract", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = false, + .psl = true, +}, +.{ .name = "fp:except", .syntax = .flag, .zig_equivalent = .other, @@ -1942,14 +1958,6 @@ flagpsl("MT"), .psl = false, }, .{ - .name = "profile-blocks", - .syntax = .flag, - .zig_equivalent = .other, - .pd1 = false, - .pd2 = true, - .psl = false, -}, -.{ .name = "resource", .syntax = .separate, .zig_equivalent = .other, @@ -2106,11 +2114,9 @@ sepd1("analyzer-inlining-mode"), flagpd1("analyzer-list-enabled-checkers"), sepd1("analyzer-max-loop"), flagpd1("analyzer-opt-analyze-headers"), -flagpd1("analyzer-opt-analyze-nested-blocks"), sepd1("analyzer-output"), sepd1("analyzer-purge"), flagpd1("analyzer-stats"), -sepd1("analyzer-store"), flagpd1("analyzer-viz-egraph-graphviz"), flagpd1("analyzer-werror"), flagpd1("fslp-vectorize-aggressive"), @@ -2125,6 +2131,14 @@ flagpd1("gno-record-gcc-switches"), flagpd1("nocudainc"), flagpd1("nocudalib"), .{ + .name = "print-multiarch", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = true, + .psl = false, +}, +.{ .name = "system-header-prefix", .syntax = .separate, .zig_equivalent = .other, @@ -2269,6 +2283,8 @@ flagpd1("frecord-gcc-switches"), flagpd1("fno-record-gcc-switches"), flagpd1("fident"), flagpd1("fno-ident"), +flagpd1("Xparser"), +flagpd1("Xcompiler"), flagpd1("fexpensive-optimizations"), flagpd1("fno-expensive-optimizations"), flagpd1("fdefer-pop"), @@ -2276,10 +2292,18 @@ flagpd1("fno-defer-pop"), flagpd1("fextended-identifiers"), flagpd1("fno-extended-identifiers"), flagpd1("fno-sanitize-blacklist"), +.{ + .name = "config", + .syntax = .separate, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, flagpd1("fcuda-rdc"), -flagpd1("fno-cuda-rdc"), flagpd1("fhonor-infinites"), flagpd1("fno-honor-infinites"), +flagpd1("fno-cuda-rdc"), flagpd1("findirect-virtual-calls"), sepd1("fnew-alignment"), flagpd1("faligned-new"), @@ -2298,6 +2322,7 @@ flagpd1("arch_errors_fatal"), sepd1("arch_only"), flagpd1("arcmt-migrate-emit-errors"), sepd1("arcmt-migrate-report-output"), +sepd1("as-secure-log-file"), flagpd1("ast-dump"), flagpd1("ast-dump-all"), flagpd1("ast-dump-decl-types"), @@ -2322,6 +2347,7 @@ sepd1("bundle_loader"), .pd2 = false, .psl = false, }, +sepd1("c-isystem"), flagpd1("canonical-prefixes"), flagpd1("cc1"), flagpd1("cc1as"), @@ -2373,14 +2399,6 @@ flagpd1("compiler-options-dump"), .psl = false, }, .{ - .name = "config", - .syntax = .separate, - .zig_equivalent = .other, - .pd1 = false, - .pd2 = true, - .psl = false, -}, -.{ .name = "coverage", .syntax = .flag, .zig_equivalent = .other, @@ -2493,7 +2511,6 @@ flagpd1("ehcontguard"), flagpd1("emit-ast"), flagpd1("emit-codegen-only"), flagpd1("emit-fir"), -flagpd1("emit-header-module"), flagpd1("emit-header-unit"), flagpd1("emit-html"), flagpd1("emit-interface-stubs"), @@ -2580,7 +2597,6 @@ flagpd1("falign-loops"), flagpd1("faligned-allocation"), flagpd1("fall-intrinsics"), flagpd1("fallow-editor-placeholders"), -flagpd1("fallow-half-arguments-and-returns"), flagpd1("fallow-pch-with-different-modules-cache-path"), flagpd1("fallow-pch-with-compiler-errors"), flagpd1("fallow-pcm-with-compiler-errors"), @@ -2668,7 +2684,6 @@ flagpd1("fcheck-array-temporaries"), flagpd1("fcommon"), flagpd1("fcompatibility-qualified-id-block-type-checking"), flagpd1("fcomplete-member-pointers"), -flagpd1("fconcepts-ts"), flagpd1("fconst-strings"), flagpd1("fconstant-cfstrings"), sepd1("fconstant-string-class"), @@ -2676,11 +2691,14 @@ sepd1("fconstexpr-backtrace-limit"), sepd1("fconstexpr-depth"), sepd1("fconstexpr-steps"), flagpd1("fconvergent-functions"), +flagpd1("fcoro-aligned-allocation"), flagpd1("fcoroutines-ts"), flagpd1("fcoverage-mapping"), +flagpd1("fcrash-diagnostics"), flagpd1("fcray-pointer"), flagpd1("fcreate-profile"), flagpd1("fcs-profile-generate"), +flagpd1("fctor-dtor-return-this"), flagpd1("fcuda-allow-variadic-functions"), flagpd1("fcuda-approx-transcendentals"), flagpd1("fcuda-flush-denormals-to-zero"), @@ -2770,11 +2788,14 @@ flagpd1("fencode-extended-block-signature"), sepd1("ferror-limit"), flagpd1("fescaping-block-tail-calls"), flagpd1("fexceptions"), +flagpd1("fexperimental-assignment-tracking"), flagpd1("fexperimental-isel"), flagpd1("fexperimental-library"), flagpd1("fexperimental-new-constant-interpreter"), -flagpd1("fexperimental-new-pass-manager"), flagpd1("fexperimental-relative-c++-abi-vtables"), +flagpd1("fexperimental-sanitize-metadata=atomics"), +flagpd1("fexperimental-sanitize-metadata=covered"), +flagpd1("fexperimental-sanitize-metadata=uar"), flagpd1("fexperimental-strict-floating-point"), flagpd1("fexternal-blas"), flagpd1("fexternc-nounwind"), @@ -2901,6 +2922,7 @@ flagpd1("fimplicit-modules"), flagpd1("fimplicit-none"), flagpd1("fimplicit-templates"), flagpd1("finclude-default-header"), +flagpd1("fincremental-extensions"), flagpd1("finit-local-zero"), flagpd1("finline"), flagpd1("finline-functions"), @@ -2958,6 +2980,7 @@ flagpd1("fmodule-header"), sepd1("fmodule-implementation-of"), flagpd1("fmodule-map-file-home-is-cwd"), flagpd1("fmodule-maps"), +flagpd1("fmodule-output"), flagpd1("fmodule-private"), flagpd1("fmodules"), flagpd1("fmodules-codegen"), @@ -3071,6 +3094,7 @@ flagpd1("fno-common"), flagpd1("fno-complete-member-pointers"), flagpd1("fno-const-strings"), flagpd1("fno-constant-cfstrings"), +flagpd1("fno-coro-aligned-allocation"), flagpd1("fno-coroutines-ts"), flagpd1("fno-coverage-mapping"), flagpd1("fno-crash-diagnostics"), @@ -3122,6 +3146,7 @@ flagpd1("fno-eliminate-unused-debug-types"), flagpd1("fno-emulated-tls"), flagpd1("fno-escaping-block-tail-calls"), flagpd1("fno-exceptions"), +flagpd1("fno-experimental-assignment-tracking"), flagpd1("fno-experimental-isel"), flagpd1("fno-experimental-library"), flagpd1("fno-experimental-relative-c++-abi-vtables"), @@ -3194,7 +3219,6 @@ flagpd1("fno-jump-tables"), flagpd1("fno-keep-static-consts"), flagpd1("fno-knr-functions"), flagpd1("fno-lax-vector-conversions"), -flagpd1("fno-legacy-pass-manager"), flagpd1("fno-limit-debug-info"), flagpd1("fno-logical-abbreviations"), .{ @@ -3222,9 +3246,11 @@ flagpd1("fno-modules-decluse"), flagpd1("fno-modules-error-recovery"), flagpd1("fno-modules-global-index"), flagpd1("fno-modules-search-all"), +flagpd1("fno-modules-share-filemanager"), flagpd1("fno-strict-modules-decluse"), flagpd1("fno_modules-validate-input-files-content"), flagpd1("fno-modules-validate-system-headers"), +flagpd1("fno-modules-validate-textual-header-includes"), flagpd1("fno-modulo-sched"), flagpd1("fno-modulo-sched-allow-regmoves"), flagpd1("fno-ms-compatibility"), @@ -3253,7 +3279,6 @@ flagpd1("fno-offload-lto"), flagpd1("fno-openmp"), flagpd1("fno-openmp-assume-teams-oversubscription"), flagpd1("fno-openmp-assume-threads-oversubscription"), -flagpd1("fno-openmp-cuda-force-full-runtime"), flagpd1("fno-openmp-cuda-mode"), flagpd1("fno-openmp-extensions"), flagpd1("fno-openmp-implicit-rpath"), @@ -3261,6 +3286,7 @@ flagpd1("fno-openmp-new-driver"), flagpd1("fno-openmp-optimistic-collapse"), flagpd1("fno-openmp-simd"), flagpd1("fno-openmp-target-debug"), +flagpd1("fno-openmp-target-jit"), flagpd1("fno-openmp-target-new-runtime"), flagpd1("fno-operator-names"), flagpd1("fno-optimize-sibling-calls"), @@ -3512,10 +3538,10 @@ flagpd1("foffload-lto"), }, flagpd1("fopenacc"), flagpd1("fopenmp"), +flagpd1("fopenmp-assume-no-nested-parallelism"), flagpd1("fopenmp-assume-no-thread-state"), flagpd1("fopenmp-assume-teams-oversubscription"), flagpd1("fopenmp-assume-threads-oversubscription"), -flagpd1("fopenmp-cuda-force-full-runtime"), flagpd1("fopenmp-cuda-mode"), flagpd1("fopenmp-enable-irbuilder"), flagpd1("fopenmp-extensions"), @@ -3528,6 +3554,7 @@ flagpd1("fopenmp-optimistic-collapse"), flagpd1("fopenmp-relocatable-target"), flagpd1("fopenmp-simd"), flagpd1("fopenmp-target-debug"), +flagpd1("fopenmp-target-jit"), flagpd1("fopenmp-target-new-runtime"), flagpd1("fopenmp-use-tls"), sepd1("foperator-arrow-depth"), @@ -3626,6 +3653,7 @@ flagpd1("frtlib-add-rpath"), flagpd1("frtti"), flagpd1("frtti-data"), flagpd1("frwpi"), +flagpd1("fsample-profile-use-profi"), flagpd1("fsanitize-address-globals-dead-stripping"), flagpd1("fsanitize-address-outline-instrumentation"), flagpd1("fsanitize-address-poison-custom-array-cookie"), @@ -3635,6 +3663,7 @@ flagpd1("fsanitize-cfi-canonical-jump-tables"), flagpd1("fsanitize-cfi-cross-dso"), flagpd1("fsanitize-cfi-icall-generalize-pointers"), flagpd1("fsanitize-coverage-8bit-counters"), +flagpd1("fsanitize-coverage-control-flow"), flagpd1("fsanitize-coverage-indirect-calls"), flagpd1("fsanitize-coverage-inline-8bit-counters"), flagpd1("fsanitize-coverage-inline-bool-flag"), @@ -3761,7 +3790,6 @@ flagpd1("ftree-ter"), flagpd1("ftree-vectorizer-verbose"), flagpd1("ftree-vrp"), flagpd1("ftrigraphs"), -sepd1("ftype-visibility"), sepd1("function-alignment"), flagpd1("funderscoring"), flagpd1("funique-basic-block-section-names"), @@ -3796,7 +3824,6 @@ flagpd1("fvectorize"), flagpd1("fverbose-asm"), flagpd1("fverify-debuginfo-preserve"), flagpd1("fvirtual-function-elimination"), -sepd1("fvisibility"), flagpd1("fvisibility-from-dllstorageclass"), flagpd1("fvisibility-global-new-delete-hidden"), flagpd1("fvisibility-inlines-hidden"), @@ -3839,6 +3866,7 @@ flagpd1("g3"), .psl = false, }, flagpd1("gcodeview"), +flagpd1("gcodeview-command-line"), flagpd1("gcodeview-ghash"), flagpd1("gcolumn-info"), flagpd1("gdbx"), @@ -3873,11 +3901,13 @@ flagpd1("gline-directives-only"), flagpd1("glldb"), flagpd1("gmlt"), flagpd1("gmodules"), +flagpd1("gno-codeview-command-line"), flagpd1("gno-codeview-ghash"), flagpd1("gno-column-info"), flagpd1("gno-embed-source"), flagpd1("gno-gnu-pubnames"), flagpd1("gno-inline-line-tables"), +flagpd1("gno-modules"), flagpd1("gno-pubnames"), flagpd1("gno-record-command-line"), flagpd1("gno-simple-template-names"), @@ -3940,6 +3970,8 @@ flagpd1("init-only"), .pd2 = false, .psl = false, }, +sepd1("internal-externc-isystem"), +sepd1("internal-isystem"), flagpd1("keep_private_externs"), sepd1("lazy_framework"), sepd1("lazy_library"), @@ -3970,6 +4002,8 @@ flagpd1("malign-double"), m("maltivec"), flagpd1("mamdgpu-ieee"), m("mamx-bf16"), +flagpd1("mamx-fp16"), +m("mamx-int8"), m("mamx-tile"), flagpd1("marm"), flagpd1("massembler-fatal-warnings"), @@ -3993,7 +4027,10 @@ m("mavx512vl"), m("mavx512vnni"), m("mavx512vp2intersect"), m("mavx512vpopcntdq"), +flagpd1("mavxifma"), +flagpd1("mavxneconvert"), m("mavxvnni"), +flagpd1("mavxvnniint8"), flagpd1("mbackchain"), flagpd1("mbig-endian"), m("mbmi"), @@ -4010,6 +4047,7 @@ m("mclzero"), flagpd1("mcmodel=medany"), flagpd1("mcmodel=medlow"), m("mcmpb"), +flagpd1("mcmpccxadd"), flagpd1("mcmse"), flagpd1("mcode-object-v3"), flagpd1("mconstant-cfstrings"), @@ -4031,7 +4069,6 @@ flagpd1("membedded-data"), flagpd1("menable-experimental-extensions"), flagpd1("menable-no-infs"), flagpd1("menable-no-nans"), -flagpd1("menable-unsafe-fp-math"), m("menqcmd"), m("mexception-handling"), m("mexecute-only"), @@ -4054,8 +4091,10 @@ flagpd1("mfp32"), m("mfp64"), sepd1("mfpmath"), m("mfprnd"), +m("mfpu"), m("mfpxx"), m("mfsgsbase"), +flagpd1("mfsmuld"), m("mfxsr"), flagpd1("mgeneral-regs-only"), m("mgfni"), @@ -4064,13 +4103,13 @@ flagpd1("mglibc"), flagpd1("mglobal-merge"), flagpd1("mgpopt"), m("mhard-float"), +m("mhard-quad-float"), m("mhvx"), m("mhvx-ieee-fp"), m("mhvx-qfloat"), m("mhreset"), m("mhtm"), flagpd1("miamcu"), -flagpd1("mibt-seal"), flagpd1("mieee-fp"), flagpd1("mieee-rnd-near"), flagpd1("mignore-xcoff-visibility"), @@ -4079,6 +4118,7 @@ flagpd1("no-finalize-removal"), flagpd1("no-ns-alloc-error"), flagpd1("mimplicit-float"), flagpd1("mincremental-linker-compatible"), +flagpd1("mindirect-branch-cs-prefix"), flagpd1("minline-all-stringops"), m("minvariant-function-descriptors"), m("minvpcid"), @@ -4105,7 +4145,6 @@ flagpd1("mldc1-sdc1"), sepd1("mlimit-float-precision"), sepd1("mlink-bitcode-file"), sepd1("mlink-builtin-bitcode"), -sepd1("mlink-cuda-bitcode"), flagpd1("mlittle-endian"), sepd1("mllvm"), flagpd1("mlocal-sdata"), @@ -4146,6 +4185,7 @@ m("mno-aes"), m("mno-altivec"), flagpd1("mno-amdgpu-ieee"), m("mno-amx-bf16"), +flagpd1("mno-amx-fp16"), m("mno-amx-int8"), m("mno-amx-tile"), m("mno-atomics"), @@ -4167,7 +4207,10 @@ m("mno-avx512vl"), m("mno-avx512vnni"), m("mno-avx512vp2intersect"), m("mno-avx512vpopcntdq"), +flagpd1("mno-avxifma"), +flagpd1("mno-avxneconvert"), m("mno-avxvnni"), +flagpd1("mno-avxvnniint8"), flagpd1("mno-backchain"), m("mno-bmi"), m("mno-bmi2"), @@ -4180,6 +4223,7 @@ m("mno-clflushopt"), m("mno-clwb"), m("mno-clzero"), m("mno-cmpb"), +flagpd1("mno-cmpccxadd"), flagpd1("mno-code-object-v3"), flagpd1("mno-constant-cfstrings"), flagpd1("mno-constructor-aliases"), @@ -4205,9 +4249,12 @@ flagpd1("mno-fix-cortex-a72-aes-1655431"), m("mno-float128"), m("mno-fma"), m("mno-fma4"), +flagpd1("mno-fmv"), flagpd1("mno-fp-ret-in-387"), m("mno-fprnd"), +m("mno-fpu"), m("mno-fsgsbase"), +m("mno-fsmuld"), m("mno-fxsr"), m("mno-gfni"), m("mno-ginv"), @@ -4267,17 +4314,21 @@ flagpd1("mno-pascal-strings"), m("mno-pclmul"), m("mno-pconfig"), flagpd1("mno-pcrel"), +flagpd1("mno-pic-data-is-text-relative"), m("mno-pku"), +m("mno-popc"), m("mno-popcnt"), m("mno-popcntd"), m("mno-power10-vector"), m("mno-power8-vector"), m("mno-power9-vector"), +flagpd1("mno-prefetchi"), m("mno-prefetchwt1"), flagpd1("mno-prefixed"), m("mno-prfchw"), m("mno-ptwrite"), flagpd1("mno-pure-code"), +flagpd1("mno-raoint"), m("mno-rdpid"), m("mno-rdpru"), m("mno-rdrnd"), @@ -4329,11 +4380,15 @@ m("mno-tgsplit"), flagpd1("mno-thumb"), flagpd1("mno-tls-direct-seg-refs"), m("mno-tsxldtrk"), +flagpd1("mno-type-check"), m("mno-uintr"), flagpd1("mno-unaligned-access"), flagpd1("mno-unsafe-fp-atomics"), m("mno-vaes"), m("mno-virt"), +m("mno-vis"), +m("mno-vis2"), +m("mno-vis3"), m("mno-vpclmulqdq"), m("mno-vsx"), flagpd1("mno-vx"), @@ -4374,13 +4429,16 @@ flagpd1("mpascal-strings"), m("mpclmul"), m("mpconfig"), flagpd1("mpcrel"), +flagpd1("mpic-data-is-text-relative"), m("mpku"), +m("mpopc"), m("mpopcnt"), m("mpopcntd"), m("mpower10-vector"), m("mcrypto"), m("mpower8-vector"), m("mpower9-vector"), +flagpd1("mprefetchi"), m("mprefetchwt1"), flagpd1("mprefixed"), m("mprfchw"), @@ -4388,6 +4446,7 @@ m("mprivileged"), m("mptwrite"), flagpd1("mpure-code"), flagpd1("mqdsp6-compat"), +flagpd1("mraoint"), m("mrdpid"), m("mrdpru"), m("mrdrnd"), @@ -4408,14 +4467,7 @@ sepd1("mregparm"), m("mrelax"), flagpd1("mrelax-all"), flagpd1("mrelax-pic-calls"), -.{ - .name = "mrelax-relocations", - .syntax = .flag, - .zig_equivalent = .other, - .pd1 = false, - .pd2 = true, - .psl = false, -}, +flagpd1("mrelax-relocations=no"), m("mrelaxed-simd"), sepd1("mrelocation-model"), flagpd1("mrestrict-it"), @@ -4439,6 +4491,7 @@ m("msingle-float"), flagpd1("mskip-rax-setup"), sepd1("msmall-data-limit"), m("msoft-float"), +flagpd1("msoft-quad-float"), m("mspe"), flagpd1("mspeculative-load-hardening"), m("msse"), @@ -4455,7 +4508,6 @@ m("mstrict-align"), flagpd1("msvr4-struct-return"), sepd1("mt-migrate-directory"), m("mtail-call"), -m("mamx-int8"), m("mtbm"), m("mtgsplit"), sepd1("mthread-model"), @@ -4481,8 +4533,14 @@ m("mv67"), flagpd1("mv67t"), m("mv68"), m("mv69"), +flagpd1("mv71"), +flagpd1("mv71t"), +flagpd1("mv73"), m("mvaes"), m("mvirt"), +m("mvis"), +m("mvis2"), +m("mvis3"), m("mvpclmulqdq"), m("mvsx"), flagpd1("mvx"), @@ -4525,6 +4583,14 @@ flagpd1("no-cpp-precomp"), .pd2 = true, .psl = false, }, +.{ + .name = "no-default-config", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, flagpd1("no-emit-llvm-uselists"), flagpd1("no-enable-noundef-analysis"), .{ @@ -4546,6 +4612,14 @@ flagpd1("no-implicit-float"), .psl = false, }, .{ + .name = "no-offload-add-rpath", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, +.{ .name = "no-offload-new-driver", .syntax = .flag, .zig_equivalent = .other, @@ -4643,6 +4717,7 @@ flagpd1("nostartfiles"), .psl = false, }, flagpd1("nostdsysteminc"), +sepd1("objc-isystem"), flagpd1("objcmt-atomic-property"), flagpd1("objcmt-migrate-all"), flagpd1("objcmt-migrate-annotation"), @@ -4658,9 +4733,18 @@ flagpd1("objcmt-migrate-readwrite-property"), flagpd1("objcmt-migrate-subscripting"), flagpd1("objcmt-ns-nonatomic-iosonly"), flagpd1("objcmt-returns-innerpointer-property"), +sepd1("objcxx-isystem"), flagpd1("object"), sepd1("object-file-name"), .{ + .name = "offload-add-rpath", + .syntax = .flag, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, +.{ .name = "offload-device-only", .syntax = .flag, .zig_equivalent = .other, @@ -4805,14 +4889,6 @@ flagpd1("print-ivar-layout"), .pd2 = true, .psl = false, }, -.{ - .name = "print-multiarch", - .syntax = .flag, - .zig_equivalent = .other, - .pd1 = true, - .pd2 = true, - .psl = false, -}, flagpd1("print-preamble"), .{ .name = "print-resource-dir", @@ -5010,6 +5086,7 @@ flagpd1("show-encoding"), }, flagpd1("show-inst"), flagpd1("single_module"), +sepd1("source-date-epoch"), .{ .name = "specs", .syntax = .separate, @@ -5153,6 +5230,7 @@ sepd1("weak_reference_mismatches"), flagpd1("whatsloaded"), flagpd1("why_load"), flagpd1("whyload"), +sepd1("working-directory"), .{ .name = "z", .syntax = .separate, @@ -5165,6 +5243,14 @@ joinpd1("fsanitize-undefined-strip-path-components="), joinpd1("fopenmp-cuda-teams-reduction-recs-num="), joinpd1("fvisibility-externs-nodllstorageclass="), joinpd1("analyzer-config-compatibility-mode="), +.{ + .name = "fno-experimental-sanitize-metadata=", + .syntax = .comma_joined, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = false, + .psl = false, +}, joinpd1("mdefault-visibility-export-mapping="), joinpd1("fsanitize-address-use-after-return="), .{ @@ -5182,6 +5268,14 @@ joinpd1("fdiagnostics-misexpect-tolerance="), joinpd1("fpatchable-function-entry-offset="), joinpd1("fprofile-selected-function-group="), joinpd1("analyzer-inline-max-stack-depth="), +.{ + .name = "fexperimental-sanitize-metadata=", + .syntax = .comma_joined, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = false, + .psl = false, +}, joinpd1("fsanitize-address-field-padding="), .{ .name = "fno-sanitize-address-vcasan-lib", @@ -5211,19 +5305,17 @@ joinpd1("mstack-protector-guard-symbol="), .psl = true, }, joinpd1("miphonesimulator-version-min="), -joinpd1("fsanitize-coverage-whitelist="), -joinpd1("fsanitize-coverage-blacklist="), joinpd1("fobjc-nonfragile-abi-version="), joinpd1("fprofile-instrument-use-path="), joinpd1("fsanitize-coverage-allowlist="), -jspd1("fxray-instrumentation-bundle="), +joinpd1("fxray-instrumentation-bundle="), joinpd1("fsanitize-address-destructor="), joinpd1("faddress-space-map-mangling="), joinpd1("foptimization-record-passes="), joinpd1("frandomize-layout-seed-file="), joinpd1("fsanitize-system-ignorelist="), joinpd1("ftest-module-file-extension="), -jspd1("fxray-instruction-threshold="), +joinpd1("fxray-instruction-threshold="), .{ .name = "libomptarget-amdgcn-bc-path=", .syntax = .joined, @@ -5258,7 +5350,6 @@ joinpd1("fconstexpr-backtrace-limit="), joinpd1("fdiagnostics-show-category="), joinpd1("fdiagnostics-show-location="), joinpd1("fopenmp-cuda-blocks-per-sm="), -jspd1("fxray-instruction-threshold"), .{ .name = "headerpad_max_install_names", .syntax = .joined, @@ -5287,6 +5378,7 @@ joinpd1("mstack-protector-guard-reg="), }, joinpd1("objcmt-whitelist-dir-path="), joinpd1("fcoverage-compilation-dir="), +joinpd1("ffloat16-excess-precision="), joinpd1("fms-compatibility-version="), joinpd1("fopenmp-cuda-number-of-sm="), joinpd1("foptimization-record-file="), @@ -5307,6 +5399,7 @@ joinpd1("analyzer-disable-checker="), joinpd1("fbuild-session-timestamp="), joinpd1("fprofile-function-groups="), joinpd1("fprofile-instrument-path="), +joinpd1("header-include-filtering="), joinpd1("mdefault-build-attributes"), joinpd1("msign-return-address-key="), .{ @@ -5350,8 +5443,7 @@ joinpd1("fprofile-remapping-file="), joinpd1("fsanitize-coverage-type="), joinpd1("fsanitize-hwaddress-abi="), joinpd1("ftime-trace-granularity="), -jspd1("fxray-always-instrument="), -jspd1("internal-externc-isystem"), +joinpd1("fxray-always-instrument="), .{ .name = "no-system-header-prefix=", .syntax = .joined, @@ -5379,7 +5471,7 @@ joinpd1("fmax-array-constructor="), joinpd1("fprofile-exclude-files="), joinpd1("frandomize-layout-seed="), joinpd1("ftrivial-auto-var-init="), -jspd1("fxray-never-instrument="), +joinpd1("fxray-never-instrument="), joinpd1("gsimple-template-names="), jspd1("interface-stub-version="), joinpd1("malign-branch-boundary="), @@ -5393,6 +5485,7 @@ joinpd1("fdenormal-fp-math-f32="), joinpd1("fembed-offload-object="), joinpd1("ffile-compilation-dir="), joinpd1("fgpu-inline-threshold="), +joinpd1("finline-max-stacksize="), joinpd1("fmax-subrecord-length="), joinpd1("fmodules-ignore-macro="), .{ @@ -5411,6 +5504,7 @@ joinpd1("fsanitize-memtag-mode="), joinpd1("fspell-checking-limit="), joinpd1("fvisibility-dllexport="), joinpd1("fxray-function-groups="), +joinpd1("header-include-format="), joinpd1("msmall-data-threshold="), joinpd1("Wlarge-by-value-copy="), joinpd1("analyzer-constraints="), @@ -5473,12 +5567,21 @@ joinpd1("fsanitize-blacklist="), .psl = false, }, joinpd1("coverage-notes-file="), +.{ + .name = "extract-api-ignores=", + .syntax = .joined, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, joinpd1("fbuild-session-file="), joinpd1("fdiagnostics-format="), joinpd1("fgpu-default-stream="), joinpd1("fmax-stack-var-size="), joinpd1("fmodules-cache-path="), joinpd1("fmodules-embed-file="), +joinpd1("fms-omit-default-lib"), joinpd1("fprofile-instrument="), joinpd1("fprofile-sample-use="), joinpd1("fstrict-flex-arrays="), @@ -5494,6 +5597,7 @@ joinpd1("Wframe-larger-than="), joinpd1("code-completion-at="), joinpd1("coverage-data-file="), joinpd1("fblas-matmul-limit="), +joinpd1("fcrash-diagnostics="), joinpd1("fdiagnostics-color="), joinpd1("femit-dwarf-unwind="), joinpd1("ffixed-line-length="), @@ -5632,6 +5736,7 @@ joinpd1("ffile-prefix-map="), joinpd1("fmodule-map-file="), joinpd1("fobjc-arc-cxxlib="), joinpd1("fproc-stat-report"), +joinpd1("ftype-visibility="), joinpd1("fwarn-stack-size="), jspd1("iwithprefixbefore"), joinpd1("malign-functions="), @@ -5648,7 +5753,6 @@ joinpd1("msve-vector-bits="), .psl = false, }, joinpd1("object-file-name="), -jspd1("working-directory"), .{ .name = "headerUnit:angle", .syntax = .joined_or_separate, @@ -5684,6 +5788,7 @@ joinpd1("finit-character="), joinpd1("fmax-type-align="), joinpd1("fmemory-profile="), joinpd1("fmessage-length="), +joinpd1("fms-runtime-lib="), .{ .name = "fopenmp-targets=", .syntax = .comma_joined, @@ -5698,8 +5803,15 @@ joinpd1("fshow-overloads="), joinpd1("fswift-async-fp="), joinpd1("ftemplate-depth-"), joinpd1("ftemplate-depth="), -jspd1("fxray-attr-list="), -jspd1("internal-isystem"), +joinpd1("fxray-attr-list="), +.{ + .name = "gcc-install-dir=", + .syntax = .joined, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, joinpd1("mlinker-version="), .{ .name = "no-offload-arch=", @@ -5710,6 +5822,14 @@ joinpd1("mlinker-version="), .psl = false, }, .{ + .name = "nvptx-arch-tool=", + .syntax = .joined, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, +.{ .name = "print-file-name=", .syntax = .joined, .zig_equivalent = .other, @@ -5776,7 +5896,6 @@ joinpd1("Rpass-analysis="), .psl = false, }, joinpd1("analyzer-purge="), -joinpd1("analyzer-store="), jspd1("current_version"), joinpd1("fbootclasspath="), joinpd1("fbracket-depth="), @@ -5786,6 +5905,7 @@ joinpd1("fembed-bitcode="), joinpd1("finput-charset="), joinpd1("fmodule-format="), joinpd1("fmodule-header="), +joinpd1("fmodule-output="), joinpd1("fms-memptr-rep="), joinpd1("fnew-alignment="), joinpd1("frecord-marker="), @@ -5895,7 +6015,6 @@ joinpd1("fprofile-list="), .pd2 = false, .psl = false, }, -jspd1("objcxx-isystem"), joinpd1("vtordisp-mode="), joinpd1("Rpass-missed="), joinpd1("Wlarger-than-"), @@ -6020,7 +6139,7 @@ joinpd1("fplugin-arg-"), joinpd1("ftime-trace="), joinpd1("fvisibility="), joinpd1("fwchar-type="), -jspd1("fxray-modes="), +joinpd1("fxray-modes="), .{ .name = "hip-version=", .syntax = .joined, @@ -6042,7 +6161,6 @@ joinpd1("mharden-sls="), joinpd1("mhvx-length="), joinpd1("mvscale-max="), joinpd1("mvscale-min="), -jspd1("objc-isystem"), .{ .name = "rsp-quoting=", .syntax = .joined, @@ -6222,6 +6340,7 @@ joinpd1("flto-jobs="), .psl = false, }, joinpd1("fuse-cuid="), +joinpd1("gsrc-hash="), jspd1("iframework"), jspd1("module-dir"), joinpd1("mtargetos="), @@ -6316,7 +6435,6 @@ joinpd1("segs_read_"), .psl = false, }, joinpd1("ast-dump="), -jspd1("c-isystem"), joinpd1("fcoarray="), joinpd1("fconvert="), joinpd1("fc++-abi="), @@ -6436,6 +6554,7 @@ jspd1("seg1addr"), .pd2 = true, .psl = false, }, +joinpd1("Xclang="), .{ .name = "cl-ext=", .syntax = .comma_joined, @@ -6445,6 +6564,14 @@ jspd1("seg1addr"), .psl = false, }, joinpd1("cl-std="), +.{ + .name = "config=", + .syntax = .joined, + .zig_equivalent = .other, + .pd1 = false, + .pd2 = true, + .psl = false, +}, joinpd1("fcheck="), .{ .name = "imacros", @@ -6464,6 +6591,7 @@ joinpd1("fcheck="), }, jspd1("iprefix"), jspd1("isystem"), +joinpd1("mguard="), joinpd1("mhwdiv="), joinpd1("moslib="), .{ @@ -6608,8 +6736,6 @@ jspd1("iquote"), .pd2 = false, .psl = false, }, -jspd1("Tdata"), -jspd1("Ttext"), .{ .name = "arch:", .syntax = .joined, @@ -6675,7 +6801,6 @@ joinpd1("mfpu="), joinpd1("mhvx="), joinpd1("mmcu="), joinpd1("mnan="), -jspd1("Tbss"), .{ .name = "link", .syntax = .remaining_args_joined, @@ -7012,6 +7137,14 @@ joinpd1("G="), .psl = true, }, .{ + .name = "d1", + .syntax = .joined, + .zig_equivalent = .other, + .pd1 = true, + .pd2 = false, + .psl = true, +}, +.{ .name = "d2", .syntax = .joined, .zig_equivalent = .other, @@ -7077,8 +7210,6 @@ joinpd1("R"), jspd1("U"), jspd1("V"), joinpd1("W"), -joinpd1("X"), -joinpd1("Z"), .{ .name = "D", .syntax = .joined_or_separate, @@ -7135,7 +7266,6 @@ joinpd1("Z"), .pd2 = false, .psl = true, }, -joinpd1("a"), jspd1("b"), joinpd1("d"), .{ diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index e19c70f322..6433191221 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -77,6 +77,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![:0]u8 { .x86 => "i386", .x86_64 => "x86_64", .xcore => "xcore", + .xtensa => "xtensa", .nvptx => "nvptx", .nvptx64 => "nvptx64", .le32 => "le32", @@ -87,6 +88,8 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![:0]u8 { .hsail64 => "hsail64", .spir => "spir", .spir64 => "spir64", + .spirv32 => "spirv32", + .spirv64 => "spirv64", .kalimba => "kalimba", .shave => "shave", .lanai => "lanai", @@ -96,8 +99,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![:0]u8 { .renderscript64 => "renderscript64", .ve => "ve", .spu_2 => return error.@"LLVM backend does not support SPU Mark II", - .spirv32 => return error.@"LLVM backend does not support SPIR-V", - .spirv64 => return error.@"LLVM backend does not support SPIR-V", }; try llvm_triple.appendSlice(llvm_arch); try llvm_triple.appendSlice("-unknown-"); @@ -168,6 +169,9 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![:0]u8 { .gnuabi64 => "gnuabi64", .gnueabi => "gnueabi", .gnueabihf => "gnueabihf", + .gnuf32 => "gnuf32", + .gnuf64 => "gnuf64", + .gnusf => "gnusf", .gnux32 => "gnux32", .gnuilp32 => "gnuilp32", .code16 => "code16", @@ -289,6 +293,7 @@ pub fn targetArch(arch_tag: std.Target.Cpu.Arch) llvm.ArchType { .x86 => .x86, .x86_64 => .x86_64, .xcore => .xcore, + .xtensa => .xtensa, .nvptx => .nvptx, .nvptx64 => .nvptx64, .le32 => .le32, @@ -10091,6 +10096,15 @@ fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { llvm.LLVMInitializeX86AsmPrinter(); llvm.LLVMInitializeX86AsmParser(); }, + .xtensa => { + if (build_options.llvm_has_xtensa) { + llvm.LLVMInitializeXtensaTarget(); + llvm.LLVMInitializeXtensaTargetInfo(); + llvm.LLVMInitializeXtensaTargetMC(); + llvm.LLVMInitializeXtensaAsmPrinter(); + llvm.LLVMInitializeXtensaAsmParser(); + } + }, .xcore => { llvm.LLVMInitializeXCoreTarget(); llvm.LLVMInitializeXCoreTargetInfo(); diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index e16da29335..4046373de3 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -1133,6 +1133,7 @@ pub extern fn LLVMInitializeSystemZTargetInfo() void; pub extern fn LLVMInitializeWebAssemblyTargetInfo() void; pub extern fn LLVMInitializeX86TargetInfo() void; pub extern fn LLVMInitializeXCoreTargetInfo() void; +pub extern fn LLVMInitializeXtensaTargetInfo() void; pub extern fn LLVMInitializeM68kTargetInfo() void; pub extern fn LLVMInitializeCSKYTargetInfo() void; pub extern fn LLVMInitializeVETargetInfo() void; @@ -1155,6 +1156,7 @@ pub extern fn LLVMInitializeSystemZTarget() void; pub extern fn LLVMInitializeWebAssemblyTarget() void; pub extern fn LLVMInitializeX86Target() void; pub extern fn LLVMInitializeXCoreTarget() void; +pub extern fn LLVMInitializeXtensaTarget() void; pub extern fn LLVMInitializeM68kTarget() void; pub extern fn LLVMInitializeVETarget() void; pub extern fn LLVMInitializeCSKYTarget() void; @@ -1177,6 +1179,7 @@ pub extern fn LLVMInitializeSystemZTargetMC() void; pub extern fn LLVMInitializeWebAssemblyTargetMC() void; pub extern fn LLVMInitializeX86TargetMC() void; pub extern fn LLVMInitializeXCoreTargetMC() void; +pub extern fn LLVMInitializeXtensaTargetMC() void; pub extern fn LLVMInitializeM68kTargetMC() void; pub extern fn LLVMInitializeCSKYTargetMC() void; pub extern fn LLVMInitializeVETargetMC() void; @@ -1199,6 +1202,7 @@ pub extern fn LLVMInitializeSystemZAsmPrinter() void; pub extern fn LLVMInitializeWebAssemblyAsmPrinter() void; pub extern fn LLVMInitializeX86AsmPrinter() void; pub extern fn LLVMInitializeXCoreAsmPrinter() void; +pub extern fn LLVMInitializeXtensaAsmPrinter() void; pub extern fn LLVMInitializeM68kAsmPrinter() void; pub extern fn LLVMInitializeVEAsmPrinter() void; pub extern fn LLVMInitializeARCAsmPrinter() void; @@ -1218,6 +1222,7 @@ pub extern fn LLVMInitializeSparcAsmParser() void; pub extern fn LLVMInitializeSystemZAsmParser() void; pub extern fn LLVMInitializeWebAssemblyAsmParser() void; pub extern fn LLVMInitializeX86AsmParser() void; +pub extern fn LLVMInitializeXtensaAsmParser() void; pub extern fn LLVMInitializeM68kAsmParser() void; pub extern fn LLVMInitializeCSKYAsmParser() void; pub extern fn LLVMInitializeVEAsmParser() void; @@ -1333,6 +1338,7 @@ pub const ArchType = enum(c_int) { x86, x86_64, xcore, + xtensa, nvptx, nvptx64, le32, diff --git a/src/target.zig b/src/target.zig index 001adad7c2..d7b2858a4b 100644 --- a/src/target.zig +++ b/src/target.zig @@ -88,6 +88,9 @@ pub fn libCGenericName(target: std.Target) [:0]const u8 { .gnuabi64, .gnueabi, .gnueabihf, + .gnuf32, + .gnuf64, + .gnusf, .gnux32, .gnuilp32, => return "glibc", @@ -286,6 +289,7 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .x86, .x86_64, .xcore, + .xtensa, .nvptx, .nvptx64, .le32, @@ -296,6 +300,8 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .hsail64, .spir, .spir64, + .spirv32, + .spirv64, .kalimba, .shave, .lanai, @@ -306,10 +312,7 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .ve, => true, - .spu_2, - .spirv32, - .spirv64, - => false, + .spu_2 => false, }; } @@ -566,6 +569,7 @@ pub fn atomicPtrAlignment( .spirv32, .dxil, .loongarch32, + .xtensa, => 32, .aarch64, diff --git a/src/translate_c.zig b/src/translate_c.zig index a6715d161c..17e8d5c82c 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -4828,7 +4828,7 @@ fn transType(c: *Context, scope: *Scope, ty: *const clang.Type, source_loc: clan }, .TypeOf => { const typeof_ty = @ptrCast(*const clang.TypeOfType, ty); - return transQualType(c, scope, typeof_ty.getUnderlyingType(), source_loc); + return transQualType(c, scope, typeof_ty.getUnmodifiedType(), source_loc); }, .TypeOfExpr => { const typeofexpr_ty = @ptrCast(*const clang.TypeOfExprType, ty); diff --git a/src/zig_clang.cpp b/src/zig_clang.cpp index bd06ead4b0..ccc4453cdf 100644 --- a/src/zig_clang.cpp +++ b/src/zig_clang.cpp @@ -425,6 +425,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) { case clang::Stmt::OMPCriticalDirectiveClass: case clang::Stmt::OMPDepobjDirectiveClass: case clang::Stmt::OMPDispatchDirectiveClass: + case clang::Stmt::OMPErrorDirectiveClass: case clang::Stmt::OMPFlushDirectiveClass: case clang::Stmt::OMPInteropDirectiveClass: case clang::Stmt::OMPDistributeDirectiveClass: @@ -529,6 +530,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) { case clang::Stmt::CXXNewExprClass: case clang::Stmt::CXXNoexceptExprClass: case clang::Stmt::CXXNullPtrLiteralExprClass: + case clang::Stmt::CXXParenListInitExprClass: case clang::Stmt::CXXPseudoDestructorExprClass: case clang::Stmt::CXXRewrittenBinaryOperatorClass: case clang::Stmt::CXXScalarValueInitExprClass: @@ -661,6 +663,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPCancellationPointDirective static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPCriticalDirectiveClass == clang::Stmt::OMPCriticalDirectiveClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPDepobjDirectiveClass == clang::Stmt::OMPDepobjDirectiveClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPDispatchDirectiveClass == clang::Stmt::OMPDispatchDirectiveClass, ""); +static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPErrorDirectiveClass == clang::Stmt::OMPErrorDirectiveClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPFlushDirectiveClass == clang::Stmt::OMPFlushDirectiveClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPInteropDirectiveClass == clang::Stmt::OMPInteropDirectiveClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPDistributeDirectiveClass == clang::Stmt::OMPDistributeDirectiveClass, ""); @@ -765,6 +768,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXInheritedCtorInitExprClass static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXNewExprClass == clang::Stmt::CXXNewExprClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXNoexceptExprClass == clang::Stmt::CXXNoexceptExprClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXNullPtrLiteralExprClass == clang::Stmt::CXXNullPtrLiteralExprClass, ""); +static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXParenListInitExprClass == clang::Stmt::CXXParenListInitExprClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXPseudoDestructorExprClass == clang::Stmt::CXXPseudoDestructorExprClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXRewrittenBinaryOperatorClass == clang::Stmt::CXXRewrittenBinaryOperatorClass, ""); static_assert((clang::Stmt::StmtClass)ZigClangStmt_CXXScalarValueInitExprClass == clang::Stmt::CXXScalarValueInitExprClass, ""); @@ -915,11 +919,13 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) { case clang::Decl::FileScopeAsm: case clang::Decl::Friend: case clang::Decl::FriendTemplate: + case clang::Decl::ImplicitConceptSpecialization: case clang::Decl::Import: case clang::Decl::LifetimeExtendedTemporary: case clang::Decl::LinkageSpec: case clang::Decl::Using: case clang::Decl::UsingEnum: + case clang::Decl::HLSLBuffer: case clang::Decl::Label: case clang::Decl::Namespace: case clang::Decl::NamespaceAlias: @@ -988,6 +994,7 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) { case clang::Decl::PragmaDetectMismatch: case clang::Decl::RequiresExprBody: case clang::Decl::StaticAssert: + case clang::Decl::TopLevelStmt: case clang::Decl::TranslationUnit: break; } @@ -1003,11 +1010,13 @@ static_assert((clang::Decl::Kind)ZigClangDeclExternCContext == clang::Decl::Exte static_assert((clang::Decl::Kind)ZigClangDeclFileScopeAsm == clang::Decl::FileScopeAsm, ""); static_assert((clang::Decl::Kind)ZigClangDeclFriend == clang::Decl::Friend, ""); static_assert((clang::Decl::Kind)ZigClangDeclFriendTemplate == clang::Decl::FriendTemplate, ""); +static_assert((clang::Decl::Kind)ZigClangDeclImplicitConceptSpecialization == clang::Decl::ImplicitConceptSpecialization, ""); static_assert((clang::Decl::Kind)ZigClangDeclImport == clang::Decl::Import, ""); static_assert((clang::Decl::Kind)ZigClangDeclLifetimeExtendedTemporary == clang::Decl::LifetimeExtendedTemporary, ""); static_assert((clang::Decl::Kind)ZigClangDeclLinkageSpec == clang::Decl::LinkageSpec, ""); static_assert((clang::Decl::Kind)ZigClangDeclUsing == clang::Decl::Using, ""); static_assert((clang::Decl::Kind)ZigClangDeclUsingEnum == clang::Decl::UsingEnum, ""); +static_assert((clang::Decl::Kind)ZigClangDeclHLSLBuffer == clang::Decl::HLSLBuffer, ""); static_assert((clang::Decl::Kind)ZigClangDeclLabel == clang::Decl::Label, ""); static_assert((clang::Decl::Kind)ZigClangDeclNamespace == clang::Decl::Namespace, ""); static_assert((clang::Decl::Kind)ZigClangDeclNamespaceAlias == clang::Decl::NamespaceAlias, ""); @@ -1076,6 +1085,7 @@ static_assert((clang::Decl::Kind)ZigClangDeclPragmaComment == clang::Decl::Pragm static_assert((clang::Decl::Kind)ZigClangDeclPragmaDetectMismatch == clang::Decl::PragmaDetectMismatch, ""); static_assert((clang::Decl::Kind)ZigClangDeclRequiresExprBody == clang::Decl::RequiresExprBody, ""); static_assert((clang::Decl::Kind)ZigClangDeclStaticAssert == clang::Decl::StaticAssert, ""); +static_assert((clang::Decl::Kind)ZigClangDeclTopLevelStmt == clang::Decl::TopLevelStmt, ""); static_assert((clang::Decl::Kind)ZigClangDeclTranslationUnit == clang::Decl::TranslationUnit, ""); void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) { @@ -2496,14 +2506,32 @@ ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **args_begin, const char bool single_file_parse = false; bool for_serialization = false; bool retain_excluded_conditional_blocks = false; + clang::ArrayRef<clang::ASTUnit::RemappedFile> remapped_files = std::nullopt; std::unique_ptr<clang::ASTUnit> err_unit; + llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = nullptr; + std::optional<llvm::StringRef> ModuleFormat = std::nullopt; clang::ASTUnit *ast_unit = clang::ASTUnit::LoadFromCommandLine( - args_begin, args_end, - pch_container_ops, diags, resources_path, - only_local_decls, clang::CaptureDiagsKind::All, clang::None, true, 0, clang::TU_Complete, - false, false, allow_pch_with_compiler_errors, clang::SkipFunctionBodiesScope::None, - single_file_parse, user_files_are_volatile, for_serialization, retain_excluded_conditional_blocks, - clang::None, &err_unit, nullptr); + args_begin, args_end, + pch_container_ops, + diags, + resources_path, + only_local_decls, + clang::CaptureDiagsKind::All, + remapped_files, + true, // remapped files keep original name + 0, // precompiled preable after n parses + clang::TU_Complete, + false, // cache code completion results + false, // include brief comments in code completion + allow_pch_with_compiler_errors, + clang::SkipFunctionBodiesScope::None, + single_file_parse, + user_files_are_volatile, + for_serialization, + retain_excluded_conditional_blocks, + ModuleFormat, + &err_unit, + VFS); *errors_len = 0; @@ -2836,9 +2864,9 @@ struct ZigClangQualType ZigClangMacroQualifiedType_getModifiedType(const struct return bitcast(casted->getModifiedType()); } -struct ZigClangQualType ZigClangTypeOfType_getUnderlyingType(const struct ZigClangTypeOfType *self) { +struct ZigClangQualType ZigClangTypeOfType_getUnmodifiedType(const struct ZigClangTypeOfType *self) { auto casted = reinterpret_cast<const clang::TypeOfType *>(self); - return bitcast(casted->getUnderlyingType()); + return bitcast(casted->getUnmodifiedType()); } const struct ZigClangExpr *ZigClangTypeOfExprType_getUnderlyingExpr(const struct ZigClangTypeOfExprType *self) { diff --git a/src/zig_clang.h b/src/zig_clang.h index fab5b83b2d..2fd91163f7 100644 --- a/src/zig_clang.h +++ b/src/zig_clang.h @@ -329,6 +329,7 @@ enum ZigClangStmtClass { ZigClangStmt_OMPCriticalDirectiveClass, ZigClangStmt_OMPDepobjDirectiveClass, ZigClangStmt_OMPDispatchDirectiveClass, + ZigClangStmt_OMPErrorDirectiveClass, ZigClangStmt_OMPFlushDirectiveClass, ZigClangStmt_OMPInteropDirectiveClass, ZigClangStmt_OMPDistributeDirectiveClass, @@ -433,6 +434,7 @@ enum ZigClangStmtClass { ZigClangStmt_CXXNewExprClass, ZigClangStmt_CXXNoexceptExprClass, ZigClangStmt_CXXNullPtrLiteralExprClass, + ZigClangStmt_CXXParenListInitExprClass, ZigClangStmt_CXXPseudoDestructorExprClass, ZigClangStmt_CXXRewrittenBinaryOperatorClass, ZigClangStmt_CXXScalarValueInitExprClass, @@ -614,11 +616,13 @@ enum ZigClangDeclKind { ZigClangDeclFileScopeAsm, ZigClangDeclFriend, ZigClangDeclFriendTemplate, + ZigClangDeclImplicitConceptSpecialization, ZigClangDeclImport, ZigClangDeclLifetimeExtendedTemporary, ZigClangDeclLinkageSpec, ZigClangDeclUsing, ZigClangDeclUsingEnum, + ZigClangDeclHLSLBuffer, ZigClangDeclLabel, ZigClangDeclNamespace, ZigClangDeclNamespaceAlias, @@ -687,6 +691,7 @@ enum ZigClangDeclKind { ZigClangDeclPragmaDetectMismatch, ZigClangDeclRequiresExprBody, ZigClangDeclStaticAssert, + ZigClangDeclTopLevelStmt, ZigClangDeclTranslationUnit, }; @@ -1301,7 +1306,7 @@ ZIG_EXTERN_C struct ZigClangQualType ZigClangAttributedType_getEquivalentType(co ZIG_EXTERN_C struct ZigClangQualType ZigClangMacroQualifiedType_getModifiedType(const struct ZigClangMacroQualifiedType *); -ZIG_EXTERN_C struct ZigClangQualType ZigClangTypeOfType_getUnderlyingType(const struct ZigClangTypeOfType *); +ZIG_EXTERN_C struct ZigClangQualType ZigClangTypeOfType_getUnmodifiedType(const struct ZigClangTypeOfType *); ZIG_EXTERN_C const struct ZigClangExpr *ZigClangTypeOfExprType_getUnderlyingExpr(const struct ZigClangTypeOfExprType *); diff --git a/src/zig_clang_cc1_main.cpp b/src/zig_clang_cc1_main.cpp index de33aa9ea9..c79306b6f7 100644 --- a/src/zig_clang_cc1_main.cpp +++ b/src/zig_clang_cc1_main.cpp @@ -177,7 +177,8 @@ static int PrintSupportedCPUs(std::string TargetStr) { // the target machine will handle the mcpu printing llvm::TargetOptions Options; std::unique_ptr<llvm::TargetMachine> TheTargetMachine( - TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options, None)); + TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options, + std::nullopt)); return 0; } diff --git a/src/zig_clang_cc1as_main.cpp b/src/zig_clang_cc1as_main.cpp index 5498810d83..f944113476 100644 --- a/src/zig_clang_cc1as_main.cpp +++ b/src/zig_clang_cc1as_main.cpp @@ -54,6 +54,7 @@ #include "llvm/Support/Timer.h" #include "llvm/Support/raw_ostream.h" #include <memory> +#include <optional> #include <system_error> using namespace clang; using namespace clang::driver; @@ -134,6 +135,7 @@ struct AssemblerInvocation { unsigned NoExecStack : 1; unsigned FatalWarnings : 1; unsigned NoWarn : 1; + unsigned NoTypeCheck : 1; unsigned IncrementalLinkerCompatible : 1; unsigned EmbedBitcode : 1; @@ -149,7 +151,14 @@ struct AssemblerInvocation { /// Darwin target variant triple, the variant of the deployment target /// for which the code is being compiled. - llvm::Optional<llvm::Triple> DarwinTargetVariantTriple; + std::optional<llvm::Triple> DarwinTargetVariantTriple; + + /// The version of the darwin target variant SDK which was used during the + /// compilation + llvm::VersionTuple DarwinTargetVariantSDKVersion; + + /// The name of a file to use with \c .secure_log_unique directives. + std::string AsSecureLogFile; /// @} public: @@ -166,6 +175,7 @@ public: NoExecStack = 0; FatalWarnings = 0; NoWarn = 0; + NoTypeCheck = 0; IncrementalLinkerCompatible = 0; Dwarf64 = 0; DwarfVersion = 0; @@ -218,6 +228,14 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, Opts.Triple = llvm::Triple::normalize(Args.getLastArgValue(OPT_triple)); if (Arg *A = Args.getLastArg(options::OPT_darwin_target_variant_triple)) Opts.DarwinTargetVariantTriple = llvm::Triple(A->getValue()); + if (Arg *A = Args.getLastArg(OPT_darwin_target_variant_sdk_version_EQ)) { + VersionTuple Version; + if (Version.tryParse(A->getValue())) + Diags.Report(diag::err_drv_invalid_value) + << A->getAsString(Args) << A->getValue(); + else + Opts.DarwinTargetVariantSDKVersion = Version; + } Opts.CPU = std::string(Args.getLastArgValue(OPT_target_cpu)); Opts.Features = Args.getAllArgValues(OPT_target_feature); @@ -237,11 +255,12 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, Opts.CompressDebugSections = llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue()) .Case("none", llvm::DebugCompressionType::None) - .Case("zlib", llvm::DebugCompressionType::Z) + .Case("zlib", llvm::DebugCompressionType::Zlib) + .Case("zstd", llvm::DebugCompressionType::Zstd) .Default(llvm::DebugCompressionType::None); } - Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations); + Opts.RelaxELFRelocations = !Args.hasArg(OPT_mrelax_relocations_no); if (auto *DwarfFormatArg = Args.getLastArg(OPT_gdwarf64, OPT_gdwarf32)) Opts.Dwarf64 = DwarfFormatArg->getOption().matches(OPT_gdwarf64); Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags); @@ -304,6 +323,7 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack); Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings); Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn); + Opts.NoTypeCheck = Args.hasArg(OPT_mno_type_check); Opts.RelocationModel = std::string(Args.getLastArgValue(OPT_mrelocation_model, "pic")); Opts.TargetABI = std::string(Args.getLastArgValue(OPT_target_abi)); @@ -329,6 +349,8 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, .Case("default", EmitDwarfUnwindType::Default); } + Opts.AsSecureLogFile = Args.getLastArgValue(OPT_as_secure_log_file); + return Success; } @@ -380,6 +402,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, MCTargetOptions MCOptions; MCOptions.EmitDwarfUnwind = Opts.EmitDwarfUnwind; + MCOptions.AsSecureLogFile = Opts.AsSecureLogFile; std::unique_ptr<MCAsmInfo> MAI( TheTarget->createMCAsmInfo(*MRI, Opts.Triple, MCOptions)); @@ -429,6 +452,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, TheTarget->createMCObjectFileInfo(Ctx, PIC)); if (Opts.DarwinTargetVariantTriple) MOFI->setDarwinTargetVariantTriple(*Opts.DarwinTargetVariantTriple); + if (!Opts.DarwinTargetVariantSDKVersion.empty()) + MOFI->setDarwinTargetVariantSDKVersion(Opts.DarwinTargetVariantSDKVersion); Ctx.setObjectFileInfo(MOFI.get()); if (Opts.SaveTemporaryLabels) @@ -468,6 +493,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, MCOptions.MCNoWarn = Opts.NoWarn; MCOptions.MCFatalWarnings = Opts.FatalWarnings; + MCOptions.MCNoTypeCheck = Opts.NoTypeCheck; MCOptions.ABIName = Opts.TargetABI; // FIXME: There is a bit of code duplication with addPassesToEmitFile. diff --git a/src/zig_clang_driver.cpp b/src/zig_clang_driver.cpp index b83cddf202..1381eb9b08 100644 --- a/src/zig_clang_driver.cpp +++ b/src/zig_clang_driver.cpp @@ -13,6 +13,7 @@ #include "clang/Driver/Driver.h" #include "clang/Basic/DiagnosticOptions.h" +#include "clang/Basic/HeaderInclude.h" #include "clang/Basic/Stack.h" #include "clang/Config/config.h" #include "clang/Driver/Compilation.h" @@ -48,6 +49,7 @@ #include "llvm/Support/Timer.h" #include "llvm/Support/raw_ostream.h" #include <memory> +#include <optional> #include <set> #include <system_error> using namespace clang; @@ -241,29 +243,68 @@ static void getCLEnvVarOptions(std::string &EnvValue, llvm::StringSaver &Saver, *NumberSignPtr = '='; } -static void SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { - auto CheckEnvVar = [](const char *EnvOptSet, const char *EnvOptFile, - std::string &OptFile) { - bool OptSet = !!::getenv(EnvOptSet); - if (OptSet) { - if (const char *Var = ::getenv(EnvOptFile)) - OptFile = Var; - } - return OptSet; - }; +template <class T> +static T checkEnvVar(const char *EnvOptSet, const char *EnvOptFile, + std::string &OptFile) { + const char *Str = ::getenv(EnvOptSet); + if (!Str) + return T{}; + + T OptVal = Str; + if (const char *Var = ::getenv(EnvOptFile)) + OptFile = Var; + return OptVal; +} +static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) { TheDriver.CCPrintOptions = - CheckEnvVar("CC_PRINT_OPTIONS", "CC_PRINT_OPTIONS_FILE", - TheDriver.CCPrintOptionsFilename); - TheDriver.CCPrintHeaders = - CheckEnvVar("CC_PRINT_HEADERS", "CC_PRINT_HEADERS_FILE", - TheDriver.CCPrintHeadersFilename); + checkEnvVar<bool>("CC_PRINT_OPTIONS", "CC_PRINT_OPTIONS_FILE", + TheDriver.CCPrintOptionsFilename); + if (checkEnvVar<bool>("CC_PRINT_HEADERS", "CC_PRINT_HEADERS_FILE", + TheDriver.CCPrintHeadersFilename)) { + TheDriver.CCPrintHeadersFormat = HIFMT_Textual; + TheDriver.CCPrintHeadersFiltering = HIFIL_None; + } else { + std::string EnvVar = checkEnvVar<std::string>( + "CC_PRINT_HEADERS_FORMAT", "CC_PRINT_HEADERS_FILE", + TheDriver.CCPrintHeadersFilename); + if (!EnvVar.empty()) { + TheDriver.CCPrintHeadersFormat = + stringToHeaderIncludeFormatKind(EnvVar.c_str()); + if (!TheDriver.CCPrintHeadersFormat) { + TheDriver.Diag(clang::diag::err_drv_print_header_env_var) + << 0 << EnvVar; + return false; + } + + const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING"); + HeaderIncludeFilteringKind Filtering; + if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) { + TheDriver.Diag(clang::diag::err_drv_print_header_env_var) + << 1 << FilteringStr; + return false; + } + + if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual && + Filtering != HIFIL_None) || + (TheDriver.CCPrintHeadersFormat == HIFMT_JSON && + Filtering != HIFIL_Only_Direct_System)) { + TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination) + << EnvVar << FilteringStr; + return false; + } + TheDriver.CCPrintHeadersFiltering = Filtering; + } + } + TheDriver.CCLogDiagnostics = - CheckEnvVar("CC_LOG_DIAGNOSTICS", "CC_LOG_DIAGNOSTICS_FILE", - TheDriver.CCLogDiagnosticsFilename); + checkEnvVar<bool>("CC_LOG_DIAGNOSTICS", "CC_LOG_DIAGNOSTICS_FILE", + TheDriver.CCLogDiagnosticsFilename); TheDriver.CCPrintProcessStats = - CheckEnvVar("CC_PRINT_PROC_STAT", "CC_PRINT_PROC_STAT_FILE", - TheDriver.CCPrintStatReportFilename); + checkEnvVar<bool>("CC_PRINT_PROC_STAT", "CC_PRINT_PROC_STAT_FILE", + TheDriver.CCPrintStatReportFilename); + + return true; } static void FixupDiagPrefixExeName(TextDiagnosticPrinter *DiagClient, @@ -306,16 +347,17 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV) { llvm::cl::ResetAllOptionOccurrences(); llvm::BumpPtrAllocator A; - llvm::StringSaver Saver(A); - llvm::cl::ExpandResponseFiles(Saver, &llvm::cl::TokenizeGNUCommandLine, ArgV, - /*MarkEOLs=*/false); + llvm::cl::ExpansionContext ECtx(A, llvm::cl::TokenizeGNUCommandLine); + if (llvm::Error Err = ECtx.expandResponseFiles(ArgV)) { + llvm::errs() << toString(std::move(Err)) << '\n'; + return 1; + } StringRef Tool = ArgV[1]; void *GetExecutablePathVP = (void *)(intptr_t)GetExecutablePath; if (Tool == "-cc1") - return cc1_main(makeArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP); + return cc1_main(ArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP); if (Tool == "-cc1as") - return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0], - GetExecutablePathVP); + return cc1as_main(ArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP); // Reject unknown tools. llvm::errs() << "error: unknown integrated tool '" << Tool << "'. " << "Valid tools include '-cc1' and '-cc1as'.\n"; @@ -355,7 +397,7 @@ int ZigClang_main(int Argc, const char **Argv) { // Finally, our -cc1 tools don't care which tokenization mode we use because // response files written by clang will tokenize the same way in either mode. bool ClangCLMode = - IsClangCL(getDriverMode(Args[0], llvm::makeArrayRef(Args).slice(1))); + IsClangCL(getDriverMode(Args[0], llvm::ArrayRef(Args).slice(1))); enum { Default, POSIX, Windows } RSPQuoting = Default; for (const char *F : Args) { if (strcmp(F, "--rsp-quoting=posix") == 0) @@ -377,7 +419,12 @@ int ZigClang_main(int Argc, const char **Argv) { if (MarkEOLs && Args.size() > 1 && StringRef(Args[1]).startswith("-cc1")) MarkEOLs = false; - llvm::cl::ExpandResponseFiles(Saver, Tokenizer, Args, MarkEOLs); + llvm::cl::ExpansionContext ECtx(A, Tokenizer); + ECtx.setMarkEOLs(MarkEOLs); + if (llvm::Error Err = ECtx.expandResponseFiles(Args)) { + llvm::errs() << toString(std::move(Err)) << '\n'; + return 1; + } // Handle -cc1 integrated tools, even if -cc1 was expanded from a response // file. @@ -409,19 +456,19 @@ int ZigClang_main(int Argc, const char **Argv) { // prepended or appended. if (ClangCLMode) { // Arguments in "CL" are prepended. - llvm::Optional<std::string> OptCL = llvm::sys::Process::GetEnv("CL"); + std::optional<std::string> OptCL = llvm::sys::Process::GetEnv("CL"); if (OptCL) { SmallVector<const char *, 8> PrependedOpts; - getCLEnvVarOptions(OptCL.value(), Saver, PrependedOpts); + getCLEnvVarOptions(*OptCL, Saver, PrependedOpts); // Insert right after the program name to prepend to the argument list. Args.insert(Args.begin() + 1, PrependedOpts.begin(), PrependedOpts.end()); } // Arguments in "_CL_" are appended. - llvm::Optional<std::string> Opt_CL_ = llvm::sys::Process::GetEnv("_CL_"); + std::optional<std::string> Opt_CL_ = llvm::sys::Process::GetEnv("_CL_"); if (Opt_CL_) { SmallVector<const char *, 8> AppendedOpts; - getCLEnvVarOptions(Opt_CL_.value(), Saver, AppendedOpts); + getCLEnvVarOptions(*Opt_CL_, Saver, AppendedOpts); // Insert at the end of the argument list to append. Args.append(AppendedOpts.begin(), AppendedOpts.end()); @@ -479,7 +526,8 @@ int ZigClang_main(int Argc, const char **Argv) { insertTargetAndModeArgs(TargetAndMode, Args, SavedStrings); - SetBackdoorDriverOutputsFromEnvVars(TheDriver); + if (!SetBackdoorDriverOutputsFromEnvVars(TheDriver)) + return 1; if (!UseNewCC1Process) { TheDriver.CC1Main = &ExecuteCC1Tool; @@ -491,12 +539,13 @@ int ZigClang_main(int Argc, const char **Argv) { Driver::ReproLevel ReproLevel = Driver::ReproLevel::OnCrash; if (Arg *A = C->getArgs().getLastArg(options::OPT_gen_reproducer_eq)) { - auto Level = llvm::StringSwitch<Optional<Driver::ReproLevel>>(A->getValue()) - .Case("off", Driver::ReproLevel::Off) - .Case("crash", Driver::ReproLevel::OnCrash) - .Case("error", Driver::ReproLevel::OnError) - .Case("always", Driver::ReproLevel::Always) - .Default(None); + auto Level = + llvm::StringSwitch<std::optional<Driver::ReproLevel>>(A->getValue()) + .Case("off", Driver::ReproLevel::Off) + .Case("crash", Driver::ReproLevel::OnCrash) + .Case("error", Driver::ReproLevel::OnError) + .Case("always", Driver::ReproLevel::Always) + .Default(std::nullopt); if (!Level) { llvm::errs() << "Unknown value for " << A->getSpelling() << ": '" << A->getValue() << "'\n"; diff --git a/src/zig_llvm-ar.cpp b/src/zig_llvm-ar.cpp index 6e5f9d36d8..093350e15a 100644 --- a/src/zig_llvm-ar.cpp +++ b/src/zig_llvm-ar.cpp @@ -68,9 +68,9 @@ static StringRef ToolName; static StringRef Stem; static void printRanLibHelp(StringRef ToolName) { - outs() << "OVERVIEW: LLVM Ranlib\n\n" - << "This program generates an index to speed access to archives\n\n" - << "USAGE: " + ToolName + " <archive-file>\n\n" + outs() << "OVERVIEW: LLVM ranlib\n\n" + << "Generate an index for archives\n\n" + << "USAGE: " + ToolName + " archive...\n\n" << "OPTIONS:\n" << " -h --help - Display available options\n" << " -v --version - Display the version of this program\n" @@ -875,8 +875,16 @@ static InsertAction computeInsertAction(ArchiveOperation Operation, if (Operation == QuickAppend || Members.empty()) return IA_AddOldMember; - auto MI = find_if( - Members, [Name](StringRef Path) { return comparePaths(Name, Path); }); + + auto MI = find_if(Members, [Name](StringRef Path) { + if (Thin && !sys::path::is_absolute(Path)) { + Expected<std::string> PathOrErr = + computeArchiveRelativePath(ArchiveName, Path); + return comparePaths(Name, PathOrErr ? *PathOrErr : Path); + } else { + return comparePaths(Name, Path); + } + }); if (MI == Members.end()) return IA_AddOldMember; @@ -1125,8 +1133,7 @@ static void performOperation(ArchiveOperation Operation, llvm_unreachable("Unknown operation."); } -static int performOperation(ArchiveOperation Operation, - std::vector<NewArchiveMember> *NewMembers) { +static int performOperation(ArchiveOperation Operation) { // Create or open the archive object. ErrorOr<std::unique_ptr<MemoryBuffer>> Buf = MemoryBuffer::getFile( ArchiveName, /*IsText=*/false, /*RequiresNullTerminator=*/false); @@ -1145,7 +1152,7 @@ static int performOperation(ArchiveOperation Operation, if (Archive->isThin()) CompareFullPath = true; performOperation(Operation, Archive.get(), std::move(Buf.get()), - NewMembers); + /*NewMembers=*/nullptr); return 0; } @@ -1160,7 +1167,7 @@ static int performOperation(ArchiveOperation Operation, } } - performOperation(Operation, nullptr, nullptr, NewMembers); + performOperation(Operation, nullptr, nullptr, /*NewMembers=*/nullptr); return 0; } @@ -1219,7 +1226,7 @@ static void runMRIScript() { break; case MRICommand::CreateThin: Thin = true; - LLVM_FALLTHROUGH; + [[fallthrough]]; case MRICommand::Create: Create = true; if (!ArchiveName.empty()) @@ -1323,7 +1330,7 @@ static int ar_main(int argc, char **argv) { SmallVector<const char *, 0> Argv(argv + 1, argv + argc); StringSaver Saver(Alloc); - cl::ExpandResponseFiles(Saver, getRspQuoting(makeArrayRef(argv, argc)), Argv); + cl::ExpandResponseFiles(Saver, getRspQuoting(ArrayRef(argv, argc)), Argv); // Get BitMode from enviorment variable "OBJECT_MODE" for AIX OS, if // specified. @@ -1403,12 +1410,11 @@ static int ar_main(int argc, char **argv) { Options += *ArgIt + 1; } - ArchiveOperation Operation = parseCommandLine(); - return performOperation(Operation, nullptr); + return performOperation(parseCommandLine()); } static int ranlib_main(int argc, char **argv) { - bool ArchiveSpecified = false; + std::vector<StringRef> Archives; for (int i = 1; i < argc; ++i) { StringRef arg(argv[i]); if (handleGenericOption(arg)) { @@ -1433,16 +1439,17 @@ static int ranlib_main(int argc, char **argv) { arg = arg.drop_front(1); } } else { - if (ArchiveSpecified) - fail("exactly one archive should be specified"); - ArchiveSpecified = true; - ArchiveName = arg.str(); + Archives.push_back(arg); } } - if (!ArchiveSpecified) { - badUsage("an archive name must be specified"); + + for (StringRef Archive : Archives) { + ArchiveName = Archive.str(); + performOperation(CreateSymTab); } - return performOperation(CreateSymTab, nullptr); + if (Archives.empty()) + badUsage("an archive name must be specified"); + return 0; } extern "C" int ZigLlvmAr_main(int argc, char **argv); @@ -1474,11 +1481,11 @@ int ZigLlvmAr_main(int argc, char **argv) { }; if (Is("dlltool")) - return dlltoolDriverMain(makeArrayRef(argv, argc)); + return dlltoolDriverMain(ArrayRef(argv, argc)); if (Is("ranlib")) return ranlib_main(argc, argv); if (Is("lib")) - return libDriverMain(makeArrayRef(argv, argc)); + return libDriverMain(ArrayRef(argv, argc)); if (Is("ar")) return ar_main(argc, argv); diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index 4f73bd2c3c..cecb266283 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -112,7 +112,7 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri const char *CPU, const char *Features, LLVMCodeGenOptLevel Level, LLVMRelocMode Reloc, LLVMCodeModel CodeModel, bool function_sections, ZigLLVMABIType float_abi, const char *abi_name) { - Optional<Reloc::Model> RM; + std::optional<Reloc::Model> RM; switch (Reloc){ case LLVMRelocStatic: RM = Reloc::Static; @@ -137,7 +137,7 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri } bool JIT; - Optional<CodeModel::Model> CM = unwrap(CodeModel, JIT); + std::optional<CodeModel::Model> CM = unwrap(CodeModel, JIT); CodeGenOpt::Level OL; switch (Level) { @@ -287,11 +287,12 @@ bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machine_ref, LLVMM // Instrumentations PassInstrumentationCallbacks instr_callbacks; - StandardInstrumentations std_instrumentations(false); + StandardInstrumentations std_instrumentations(llvm_module.getContext(), false); std_instrumentations.registerCallbacks(instr_callbacks); + std::optional<PGOOptions> opt_pgo_options = {}; PassBuilder pass_builder(&target_machine, pipeline_opts, - None, &instr_callbacks); + opt_pgo_options, &instr_callbacks); LoopAnalysisManager loop_am; FunctionAnalysisManager function_am; @@ -415,14 +416,9 @@ ZIG_EXTERN_C LLVMTypeRef ZigLLVMTokenTypeInContext(LLVMContextRef context_ref) { ZIG_EXTERN_C void ZigLLVMSetOptBisectLimit(LLVMContextRef context_ref, int limit) { - // In LLVM15 we just have an OptBisect singleton we can edit. - OptBisect& bisect = getOptBisector(); - bisect.setLimit(limit); - - // In LLVM16 OptBisect will be wrapped in OptPassGate, and will need to be set per context. - // static OptBisect _opt_bisector; - // _opt_bisector.setLimit(limit); - // unwrap(context_ref)->setOptPassGate(_opt_bisector); + static OptBisect opt_bisect; + opt_bisect.setLimit(limit); + unwrap(context_ref)->setOptPassGate(opt_bisect); } LLVMValueRef ZigLLVMAddFunctionInAddressSpace(LLVMModuleRef M, const char *Name, LLVMTypeRef FunctionTy, unsigned AddressSpace) { @@ -435,8 +431,8 @@ LLVMValueRef ZigLLVMBuildCall(LLVMBuilderRef B, LLVMTypeRef Ty, LLVMValueRef Fn, const char *Name) { FunctionType *FTy = unwrap<FunctionType>(Ty); - CallInst *call_inst = unwrap(B)->CreateCall(FTy, unwrap(Fn), makeArrayRef(unwrap(Args), - NumArgs), Name); + CallInst *call_inst = unwrap(B)->CreateCall(FTy, unwrap(Fn), + ArrayRef(unwrap(Args), NumArgs), Name); call_inst->setCallingConv(static_cast<CallingConv::ID>(CC)); switch (attr) { case ZigLLVM_CallAttrAuto: @@ -579,7 +575,7 @@ ZigLLVMDIType *ZigLLVMCreateDebugPointerType(ZigLLVMDIBuilder *dibuilder, ZigLLV uint64_t size_in_bits, uint64_t align_in_bits, const char *name) { DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createPointerType( - reinterpret_cast<DIType*>(pointee_type), size_in_bits, align_in_bits, Optional<unsigned>(), name); + reinterpret_cast<DIType*>(pointee_type), size_in_bits, align_in_bits, std::optional<unsigned>(), name); return reinterpret_cast<ZigLLVMDIType*>(di_type); } @@ -625,7 +621,7 @@ ZigLLVMDIEnumerator *ZigLLVMCreateDebugEnumeratorOfArbitraryPrecision(ZigLLVMDIB const char *name, unsigned NumWords, const uint64_t Words[], unsigned int bits, bool isUnsigned) { DIEnumerator *di_enumerator = reinterpret_cast<DIBuilder*>(dibuilder)->createEnumerator(name, - APSInt(APInt(bits, makeArrayRef(Words, NumWords)), isUnsigned)); + APSInt(APInt(bits, ArrayRef(Words, NumWords)), isUnsigned)); return reinterpret_cast<ZigLLVMDIEnumerator*>(di_enumerator); } @@ -1493,6 +1489,7 @@ static_assert((Triple::ArchType)ZigLLVM_thumbeb == Triple::thumbeb, ""); static_assert((Triple::ArchType)ZigLLVM_x86 == Triple::x86, ""); static_assert((Triple::ArchType)ZigLLVM_x86_64 == Triple::x86_64, ""); static_assert((Triple::ArchType)ZigLLVM_xcore == Triple::xcore, ""); +static_assert((Triple::ArchType)ZigLLVM_xtensa == Triple::xtensa, ""); static_assert((Triple::ArchType)ZigLLVM_nvptx == Triple::nvptx, ""); static_assert((Triple::ArchType)ZigLLVM_nvptx64 == Triple::nvptx64, ""); static_assert((Triple::ArchType)ZigLLVM_le32 == Triple::le32, ""); @@ -1578,6 +1575,9 @@ static_assert((Triple::EnvironmentType)ZigLLVM_GNUABIN32 == Triple::GNUABIN32, " static_assert((Triple::EnvironmentType)ZigLLVM_GNUABI64 == Triple::GNUABI64, ""); static_assert((Triple::EnvironmentType)ZigLLVM_GNUEABI == Triple::GNUEABI, ""); static_assert((Triple::EnvironmentType)ZigLLVM_GNUEABIHF == Triple::GNUEABIHF, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_GNUF32 == Triple::GNUF32, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_GNUF64 == Triple::GNUF64, ""); +static_assert((Triple::EnvironmentType)ZigLLVM_GNUSF == Triple::GNUSF, ""); static_assert((Triple::EnvironmentType)ZigLLVM_GNUX32 == Triple::GNUX32, ""); static_assert((Triple::EnvironmentType)ZigLLVM_GNUILP32 == Triple::GNUILP32, ""); static_assert((Triple::EnvironmentType)ZigLLVM_CODE16 == Triple::CODE16, ""); diff --git a/src/zig_llvm.h b/src/zig_llvm.h index 70c53f61a4..33b71f7f87 100644 --- a/src/zig_llvm.h +++ b/src/zig_llvm.h @@ -382,6 +382,7 @@ enum ZigLLVM_ArchType { ZigLLVM_x86, // X86: i[3-9]86 ZigLLVM_x86_64, // X86-64: amd64, x86_64 ZigLLVM_xcore, // XCore: xcore + ZigLLVM_xtensa, // Tensilica: Xtensa ZigLLVM_nvptx, // NVPTX: 32-bit ZigLLVM_nvptx64, // NVPTX: 64-bit ZigLLVM_le32, // le32: generic little-endian 32-bit CPU (PNaCl) @@ -482,6 +483,9 @@ enum ZigLLVM_EnvironmentType { ZigLLVM_GNUABI64, ZigLLVM_GNUEABI, ZigLLVM_GNUEABIHF, + ZigLLVM_GNUF32, + ZigLLVM_GNUF64, + ZigLLVM_GNUSF, ZigLLVM_GNUX32, ZigLLVM_GNUILP32, ZigLLVM_CODE16, |
