Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ld64 flags #90717

Merged
merged 3 commits into from
Nov 15, 2021
Merged

Fix ld64 flags #90717

merged 3 commits into from
Nov 15, 2021

Conversation

kit-981
Copy link
Contributor

@kit-981 kit-981 commented Nov 9, 2021

  • The -exported_symbols_list argument appears to be malformed for ld64 (if you are not going through clang).
  • The -dynamiclib argument isn't support for ld64. It should be guarded behind a compiler flag.

These problems are fixed by these changes. I have also refactored the way linker arguments are generated to be ld/compiler agnostic and therefore less error prone.

These changes are necessary to support cross-compilation to darwin targets.

@rust-highfive
Copy link
Collaborator

r? @davidtwco

(rust-highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Nov 9, 2021
@kit-981
Copy link
Contributor Author

kit-981 commented Nov 9, 2021

Testing is awkward due to how Rust is bootstrapped.

Currently, the Rust compiler will provide incorrect flags to the linker if one is explicitly defined in config.toml. It is not enough to test these changes by building the branch with an explicitly defined linker in config.toml for darwin platforms. The build will fail when the stage 0 compiler calls ld64.

I handled this by writing a program to sit between rustc and ld64. This program would parse the malformed exported_symbols_list argument and generate an argument that fits the syntax ld64 expects. It would also remove the -dynamiclib argument which is not a valid linker argument. It would then call ld64 which the arguments it itself was provided. There were no issues when I explicitly defined this as the linker in config.toml.

@kit-981
Copy link
Contributor Author

kit-981 commented Nov 9, 2021

The bootstrap crate hard-codes flags that are not compatible with ld64.

                Some("-Wl,-rpath,@loader_path/../lib")

From what I can the bootstrap crate does not have logic similar to rustc_codegen_ssa for determining what "kind" of linker is being used (a compiler or an actual linker). This must also be fixed but I haven't addressed in in this pull request.

I would like to merge changes to rustc_codegen_ssa and bootstrap separately but if it's preferred to have them together, let me know and I'll update the branch.

@petrochenkov petrochenkov self-assigned this Nov 9, 2021
@davidtwco davidtwco removed their assignment Nov 9, 2021
@petrochenkov
Copy link
Contributor

@kit-981
rustc doesn't generally support linking with ld64 directly, even if all flags are passed correctly, rustc still won't be able to find startup objects, for example (see #86064 for some previous discussion).

Linking directly with a linker (as opposed to a gcc/clang wrapper) is typically only supported for bare metal targets, which Apple targets are not.
Do you have any specific reasons to avoid the wrappers and using the linker directly?
cc #11937

@petrochenkov petrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 10, 2021
@kit-981
Copy link
Contributor Author

kit-981 commented Nov 10, 2021

        if self.sess.target.is_like_osx {
            if !self.is_ld {
                arg.push("-Wl,")
            }
            arg.push("-exported_symbols_list,");
        } else if self.sess.target.is_like_solaris {
            if !self.is_ld {
                arg.push("-Wl,")
            }
            arg.push("-M,");
        } else {
            if !self.is_ld {
                arg.push("-Wl,")
            }
            // Both LD and LLD accept export list in *.def file form, there are no flags required
            if !is_windows {
                arg.push("--version-script=")
            }
        }

        arg.push(&path);
        self.cmd.arg(arg);

Suppose you are using Clang to link for an osx-like target. The first condition !self.is_ld will pass and the argument will start with -Wl,. -exported-symbols-list, is then unconditionally appended and then followed by the path. This argument is constructed correctly.

Suppose you are using ld to link for an osx-like target. The first condition !self.is_ld will not pass and the argument will start with -exported-symbols-list, which is then appended with the path. -exported-symbols-list,PATH is not a valid argument in any situation. This is obviously a bug. There is no situation where this logic is intended behaviour.

    fn build_dylib(&mut self, out_filename: &Path) {
        // On mac we need to tell the linker to let this library be rpathed
        if self.sess.target.is_like_osx {
            self.cmd.arg("-dynamiclib");

As mentioned in #86064, -dynamiclib is not an argument for ld.

    /// Argument that must be passed *directly* to the linker
    ///
    /// These arguments need to be prepended with `-Wl`, when a GCC-style linker is used.
    fn linker_arg<S>(&mut self, arg: S) -> &mut Self
    where
        S: AsRef<OsStr>,
    {
        if !self.is_ld {
            let mut os = OsString::from("-Wl,");
            os.push(arg.as_ref());
            self.cmd.arg(os);
        } else {
            self.cmd.arg(arg);
        }
        self
    }

Given that this logic exists, I can only assume that adding -dynamiclib unconditionally is also a mistake and a bug.

rustc doesn't generally support linking with ld64 directly, even if all flags are passed correctly, rustc still won't be able to find startup objects, for example (see #86064 for some previous discussion).

This is not consistent with my experience. I have been very happily using a forked version of the Rust compiler with cctools to compile executables and run them on macOS. I have gone further and have run iOS executables using this toolchain as you can see in #88072 and #88077.

Linking directly with a linker (as opposed to a gcc/clang wrapper) is typically only supported for bare metal targets, which Apple targets are not.

Sure but this doesn't change the fact that these are bugs that I have volunteered to fix and have fixed. I'm not introducing support. I'm fixing obviously broken code.

Do you have any specific reasons to avoid the wrappers and using the linker directly?

Clang will use the system linker by default on Linux which likely doesn't support mach-o or macOS/iOS targets. I assume I could use -B/path/to/cctools/bin to encourage use of ld64 but I haven't tested this.

Philosophically, I don't think its sound for Rust to rely on Clang as a proxy to do linking. There is more control, less moving parts, and less room for error if Rust calls the linker directly. However, this is unrelated to this pull request.

@petrochenkov petrochenkov added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Nov 11, 2021
@apiraino apiraino added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Nov 11, 2021
@petrochenkov
Copy link
Contributor

Sounds reasonable, I've left a couple of stylistic suggestions.

@petrochenkov petrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 12, 2021
@kit-981
Copy link
Contributor Author

kit-981 commented Nov 14, 2021

@petrochenkov Thanks for the feedback. I've updated my changes with your suggestions.

Linker arguments must transformed when Rust is interacting with the
linker through a compiler. This commit introduces a helper function
that abstracts away details of this transformation.
This commit refactors linker argument generation to leverage a helper
function that abstracts away details governing how these arguments are
transformed and provided to the linker.

This fixes the misuse of the `-exported_symbols_list` when an ld-like
linker is used rather than a compiler. A compiler would expect
`-Wl,-exported_symbols_list,path` but ld would expect
`-exported_symbols_list` and `path` as two seperate arguments. Prior
to this change, an ld-like linker was given
`-exported_symbols_list,path`.
This is not a valid flag for ld64. When the ld64 linker is explicitly
provided through `config.toml`, rustc will not successfully compile.
@kit-981
Copy link
Contributor Author

kit-981 commented Nov 14, 2021

@rustbot label -S-waiting-on-author +S-waiting-on-review

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Nov 14, 2021
@petrochenkov
Copy link
Contributor

@bors r+

@bors
Copy link
Contributor

bors commented Nov 14, 2021

📌 Commit f44fa63 has been approved by petrochenkov

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 14, 2021
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Nov 14, 2021
Fix ld64 flags

- The `-exported_symbols_list` argument appears to be malformed for `ld64` (if you are not going through `clang`).
- The `-dynamiclib` argument isn't support for `ld64`. It should be guarded behind a compiler flag.

These problems are fixed by these changes. I have also refactored the way linker arguments are generated to be ld/compiler agnostic and therefore less error prone.

These changes are necessary to support cross-compilation to darwin targets.
@bors
Copy link
Contributor

bors commented Nov 14, 2021

⌛ Testing commit f44fa63 with merge d1dfa755bbf9b466e32fe72790b68b6d80abecf4...

@bors
Copy link
Contributor

bors commented Nov 14, 2021

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Nov 14, 2021
@rust-log-analyzer
Copy link
Collaborator

The job dist-powerpc64le-linux failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
   Compiling thread_local v1.0.1
error: could not compile `bootstrap`

Caused by:
  process didn't exit successfully: `/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/rustc --crate-name build_script_build --edition=2021 src/bootstrap/build.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=1 -C metadata=067961332e84d7f5 -C extra-filename=-067961332e84d7f5 --out-dir /checkout/obj/build/bootstrap/debug/build/bootstrap-067961332e84d7f5 -C incremental=/checkout/obj/build/bootstrap/debug/incremental -L dependency=/checkout/obj/build/bootstrap/debug/deps -Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings` (signal: 11, SIGSEGV: invalid memory reference)
error: build failed
failed to run: /checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path /checkout/src/bootstrap/Cargo.toml --locked
Build completed unsuccessfully in 0:00:55
make: *** [prepare] Error 1
---
   Compiling toml v0.5.7
error: could not compile `serde`

Caused by:
  process didn't exit successfully: `/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/rustc --crate-name serde /cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.125/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=0 --cfg 'feature="default"' --cfg 'feature="derive"' --cfg 'feature="serde_derive"' --cfg 'feature="std"' -C metadata=e7ed636813468773 -C extra-filename=-e7ed636813468773 --out-dir /checkout/obj/build/bootstrap/debug/deps -L dependency=/checkout/obj/build/bootstrap/debug/deps --extern serde_derive=/checkout/obj/build/bootstrap/debug/deps/libserde_derive-dc5c18f1dfc7942d.so --cap-lints allow -Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings --cfg ops_bound --cfg core_reverse --cfg de_boxed_c_str --cfg de_boxed_path --cfg de_rc_dst --cfg core_duration --cfg integer128 --cfg range_inclusive --cfg num_nonzero --cfg serde_derive --cfg core_try_from --cfg num_nonzero_signed --cfg systemtime_checked_add --cfg std_atomic64 --cfg std_atomic` (signal: 11, SIGSEGV: invalid memory reference)
error: build failed
failed to run: /checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path /checkout/src/bootstrap/Cargo.toml --locked
Build completed unsuccessfully in 0:00:12
make: *** [prepare] Error 1
---
[RUSTC-TIMING] adler test:false 0.153
[RUSTC-TIMING] unwind test:false 0.067
[RUSTC-TIMING] libc test:false 0.674
[RUSTC-TIMING] compiler_builtins test:false 0.866
rustc exited with signal: 11 (core dumped)
error: could not compile `compiler_builtins`
Caused by:
Caused by:
  process didn't exit successfully: `/checkout/obj/build/bootstrap/debug/rustc --crate-name compiler_builtins /cargo/registry/src/github.com-1ecc6299db9ec823/compiler_builtins-0.1.49/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C codegen-units=10000 -C debuginfo=1 --cfg 'feature="c"' --cfg 'feature="cc"' --cfg 'feature="compiler-builtins"' --cfg 'feature="core"' --cfg 'feature="default"' --cfg 'feature="rustc-dep-of-std"' -C metadata=6bdc4f8396c65e15 -C extra-filename=-6bdc4f8396c65e15 --out-dir /checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps --target x86_64-unknown-linux-gnu -L dependency=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps -L dependency=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/release/deps --extern core=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/librustc_std_workspace_core-fd44d8b17c2359b1.rmeta --cap-lints allow --cfg=bootstrap -Zsymbol-mangling-version=legacy -Zmacro-backtrace '-Clink-args=-Wl,-rpath,$ORIGIN/../lib' -Cprefer-dynamic '-Zcrate-attr=doc(html_root_url="https://doc.rust-lang.org/nightly/")' -Z binary-dep-depinfo -L native=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/build/compiler_builtins-399cb2af88d0d65a/out --cfg 'feature="unstable"' --cfg '__absvdi2="optimized-c"' --cfg '__absvsi2="optimized-c"' --cfg '__absvti2="optimized-c"' --cfg '__addvdi3="optimized-c"' --cfg '__addvsi3="optimized-c"' --cfg '__addvti3="optimized-c"' --cfg '__clzdi2="optimized-c"' --cfg '__clzsi2="optimized-c"' --cfg '__clzti2="optimized-c"' --cfg '__cmpdi2="optimized-c"' --cfg '__cmpti2="optimized-c"' --cfg '__ctzdi2="optimized-c"' --cfg '__ctzsi2="optimized-c"' --cfg '__ctzti2="optimized-c"' --cfg '__divdc3="optimized-c"' --cfg '__divsc3="optimized-c"' --cfg '__divxc3="optimized-c"' --cfg '__extendhfsf2="optimized-c"' --cfg '__ffsti2="optimized-c"' --cfg '__floatdisf="optimized-c"' --cfg '__floatdixf="optimized-c"' --cfg '__floatundidf="optimized-c"' --cfg '__floatundisf="optimized-c"' --cfg '__floatundixf="optimized-c"' --cfg '__int_util="optimized-c"' --cfg '__muldc3="optimized-c"' --cfg '__mulsc3="optimized-c"' --cfg '__mulvdi3="optimized-c"' --cfg '__mulvsi3="optimized-c"' --cfg '__mulvti3="optimized-c"' --cfg '__mulxc3="optimized-c"' --cfg '__negdf2="optimized-c"' --cfg '__negdi2="optimized-c"' --cfg '__negsf2="optimized-c"' --cfg '__negti2="optimized-c"' --cfg '__negvdi2="optimized-c"' --cfg '__negvsi2="optimized-c"' --cfg '__negvti2="optimized-c"' --cfg '__paritydi2="optimized-c"' --cfg '__paritysi2="optimized-c"' --cfg '__parityti2="optimized-c"' --cfg '__popcountdi2="optimized-c"' --cfg '__popcountsi2="optimized-c"' --cfg '__popcountti2="optimized-c"' --cfg '__powixf2="optimized-c"' --cfg '__subvdi3="optimized-c"' --cfg '__subvsi3="optimized-c"' --cfg '__subvti3="optimized-c"' --cfg '__truncdfhf2="optimized-c"' --cfg '__truncdfsf2="optimized-c"' --cfg '__truncsfhf2="optimized-c"' --cfg '__ucmpdi2="optimized-c"' --cfg '__ucmpti2="optimized-c"' --cfg 'apple_versioning="optimized-c"' -l static=compiler-rt` (exit status: 254)
[RUSTC-TIMING] memchr test:false 1.340
[RUSTC-TIMING] rustc_demangle test:false 1.518
[RUSTC-TIMING] alloc test:false 2.308
[RUSTC-TIMING] core test:false 16.254

@petrochenkov
Copy link
Contributor

@bors retry

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 14, 2021
@bors
Copy link
Contributor

bors commented Nov 14, 2021

⌛ Testing commit f44fa63 with merge 9269d4fbb432e4cece5f54c2d4c1a5214398f13a...

@bors
Copy link
Contributor

bors commented Nov 14, 2021

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Nov 14, 2021
@rust-log-analyzer
Copy link
Collaborator

The job dist-powerpc-linux failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
   Compiling cc v1.0.69
error: could not compile `unicode-width`

Caused by:
  process didn't exit successfully: `/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/rustc --crate-name unicode_width /cargo/registry/src/github.com-1ecc6299db9ec823/unicode-width-0.1.8/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C embed-bitcode=no -C debuginfo=0 --cfg 'feature="default"' -C metadata=58a25f3a30d31e30 -C extra-filename=-58a25f3a30d31e30 --out-dir /checkout/obj/build/bootstrap/debug/deps -L dependency=/checkout/obj/build/bootstrap/debug/deps --cap-lints allow -Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings` (signal: 11, SIGSEGV: invalid memory reference)
error: build failed
failed to run: /checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path /checkout/src/bootstrap/Cargo.toml --locked
Build completed unsuccessfully in 0:00:54
make: *** [prepare] Error 1
---
   Compiling getopts v0.2.21
error: could not compile `proc-macro-error-attr`

Caused by:
  process didn't exit successfully: `/checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/rustc --crate-name build_script_build --edition=2018 /cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro-error-attr-1.0.4/build.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type bin --emit=dep-info,link -C embed-bitcode=no -C debuginfo=0 -C metadata=4f6b81b2163c9b70 -C extra-filename=-4f6b81b2163c9b70 --out-dir /checkout/obj/build/bootstrap/debug/build/proc-macro-error-attr-4f6b81b2163c9b70 -L dependency=/checkout/obj/build/bootstrap/debug/deps --extern version_check=/checkout/obj/build/bootstrap/debug/deps/libversion_check-f9c226c5b81333d5.rlib --cap-lints allow -Wrust_2018_idioms -Wunused_lifetimes -Wsemicolon_in_expressions_from_macros -Dwarnings` (signal: 6, SIGABRT: process abort signal)
error: build failed
failed to run: /checkout/obj/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path /checkout/src/bootstrap/Cargo.toml --locked
Build completed unsuccessfully in 0:00:01
make: *** [prepare] Error 1
---
   Compiling adler v0.2.3
   Compiling rustc-demangle v0.1.21
[RUSTC-TIMING] cfg_if test:false 0.036
[RUSTC-TIMING] adler test:false 0.270
rustc exited with signal: 11 (core dumped)
error: could not compile `adler`
Caused by:
Caused by:
  process didn't exit successfully: `/checkout/obj/build/bootstrap/debug/rustc --crate-name adler /cargo/registry/src/github.com-1ecc6299db9ec823/adler-0.2.3/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts --crate-type lib --emit=dep-info,metadata,link -C opt-level=3 -C embed-bitcode=no -C codegen-units=1 -C debuginfo=0 --cfg 'feature="compiler_builtins"' --cfg 'feature="core"' --cfg 'feature="rustc-dep-of-std"' -C metadata=2de8c5ba493bc641 -C extra-filename=-2de8c5ba493bc641 --out-dir /checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps --target x86_64-unknown-linux-gnu -L dependency=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps -L dependency=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/release/deps --extern compiler_builtins=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/libcompiler_builtins-6bdc4f8396c65e15.rmeta --extern core=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/deps/librustc_std_workspace_core-fd44d8b17c2359b1.rmeta --cap-lints allow --cfg=bootstrap -Zsymbol-mangling-version=legacy -Zmacro-backtrace '-Clink-args=-Wl,-rpath,$ORIGIN/../lib' -Cprefer-dynamic '-Zcrate-attr=doc(html_root_url="https://doc.rust-lang.org/nightly/")' -Z binary-dep-depinfo -L native=/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-std/x86_64-unknown-linux-gnu/release/build/compiler_builtins-399cb2af88d0d65a/out` (exit status: 254)
[RUSTC-TIMING] libc test:false 0.699
[RUSTC-TIMING] compiler_builtins test:false 0.749
[RUSTC-TIMING] memchr test:false 1.341
[RUSTC-TIMING] rustc_demangle test:false 1.522

@petrochenkov
Copy link
Contributor

@bors retry

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 15, 2021
@bors
Copy link
Contributor

bors commented Nov 15, 2021

⌛ Testing commit f44fa63 with merge eab2d75...

@bors
Copy link
Contributor

bors commented Nov 15, 2021

☀️ Test successful - checks-actions
Approved by: petrochenkov
Pushing eab2d75 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Nov 15, 2021
@bors bors merged commit eab2d75 into rust-lang:master Nov 15, 2021
@rustbot rustbot added this to the 1.58.0 milestone Nov 15, 2021
@rust-timer
Copy link
Collaborator

Finished benchmarking commit (eab2d75): comparison url.

Summary: This benchmark run did not return any relevant changes.

If you disagree with this performance assessment, please file an issue in rust-lang/rustc-perf.

@rustbot label: -perf-regression

@kit-981 kit-981 deleted the fix-ld64-flags branch November 15, 2021 23:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants