aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clang.zig9
-rw-r--r--src/clang_options_data.zig270
-rw-r--r--src/codegen/llvm.zig18
-rw-r--r--src/codegen/llvm/bindings.zig6
-rw-r--r--src/target.zig12
-rw-r--r--src/translate_c.zig2
-rw-r--r--src/zig_clang.cpp44
-rw-r--r--src/zig_clang.h7
-rw-r--r--src/zig_clang_cc1_main.cpp3
-rw-r--r--src/zig_clang_cc1as_main.cpp32
-rw-r--r--src/zig_clang_driver.cpp125
-rw-r--r--src/zig_llvm-ar.cpp53
-rw-r--r--src/zig_llvm.cpp32
-rw-r--r--src/zig_llvm.h4
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,