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

rustc: Allow #[no_mangle] anywhere in a crate #54451

Merged
merged 1 commit into from
Oct 7, 2018

Conversation

alexcrichton
Copy link
Member

This commit updates the compiler to allow the #[no_mangle] (and
#[export_name] attributes) to be located anywhere within a crate.
These attributes are unconditionally processed, causing the compiler to
always generate an exported symbol with the appropriate name.

After some discussion on #54135 it was found that not a great reason
this hasn't been allowed already, and it seems to match the behavior
that many expect! Previously the compiler would only export a
#[no_mangle] symbol if it were publicly reachable, meaning that it
itself is pub and it's otherwise publicly reachable from the root of
the crate. This new definition is that #[no_mangle] is always
reachable
, no matter where it is in a crate or whether it has pub or
not.

This should make it much easier to declare an exported symbol with a
known and unique name, even when it's an internal implementation detail
of the crate itself. Note that these symbols will persist beyond LTO as
well, always making their way to the linker.

Along the way this commit removes the private_no_mangle_functions lint
(also for statics) as there's no longer any need to lint these
situations. Furthermore a good number of tests were updated now that
symbol visibility has been changed.

Closes #54135

@rust-highfive
Copy link
Collaborator

r? @petrochenkov

(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 Sep 21, 2018
@alexcrichton
Copy link
Member Author

I'd still like to confirm that this fixes the issues with wasm-bindgen, but I'd like to put this up for review as well to get others thoughts on it.

cc @japaric

@@ -809,7 +809,7 @@ fn analyze_gdb(gdb: Option<String>) -> (Option<String>, Option<u32>, bool) {

let gdb_native_rust = version.map_or(false, |v| v >= MIN_GDB_WITH_RUST);

(Some(gdb.to_owned()), version, gdb_native_rust)
(Some(gdb.to_owned()), version, gdb_native_rust && false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks ... suspicious. Perhaps it was used for local testing?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops, indeed a mistake!

@alexcrichton alexcrichton force-pushed the no-mangle-extern-linkage branch from 9b2fd84 to 74639e9 Compare September 22, 2018 00:13

#![crate_type = "lib"]

mod private {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please add test cases for these patterns?

fn internal() {
    #[no_mangle]
    static EXTERNAL: fn() = internal;
}

static FOO: u32 = {
    #[no_mangle]
    static BAR: &u32 = &FOO;
    0
};

const PRIVATE: () = {
    #[no_mangle]
     fn exported() {}
};

I can see myself writing attributes / macros that expand into those patterns.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Certainly!

@japaric
Copy link
Member

japaric commented Sep 22, 2018

I tested this locally with the Cortex-M stuff by making a lot stuff private and linking works perfectly 👌

Though, it seems that the dead_code lint will need to be updated to accommodate this change; I get several warnings like the ones shown below:

fn foo() {} // WARN function is never used

#[no_mangle]
static FOO: fn() = foo; // WARN static item is never used

struct Bar; // WARN struct is never constructed

#[no_mangle]
static BAR: Bar = Bar; // WARN static item is never used

#[no_mangle]
fn baz() {} // WARN function is never used

@alexcrichton
Copy link
Member Author

@japaric ah I think I may have actually pushed an update after I noticed the same thing myself, if you try out the current state of the PR I think it should fix that.

@alexcrichton alexcrichton force-pushed the no-mangle-extern-linkage branch from 74639e9 to 1cb4978 Compare September 22, 2018 00:39
@japaric
Copy link
Member

japaric commented Sep 22, 2018

@alexcrichton I can confirm that I get zero warnings with the latest version. 👍

@alexcrichton
Copy link
Member Author

r? @michaelwoerister

@pnkfelix
Copy link
Member

I am very interested to see if this helps resolve some of the transient linking failures that have been flummoxing me for weeks

@nagisa
Copy link
Member

nagisa commented Sep 22, 2018

I’d like to point out that this is also a breaking change in case anybody depended on #[no_mangle]d functions having the same visibility as publicity in any way.

For example, doing something like this should end up raising a linker error after this PR:

# test.rs
#[no_mangle]
fn foo() -> u32 { // not public!
    42
}
# test.c {
int foo(void) { return 64; }

int main() { return foo(); }
# compile with:
rustc --emit=obj --crate-type=staticlib -o test.o
clang -c test.c -o ctest.o
clang ctest.o test.o
# linker error here because of now genuinely duplicate symbols

Admittedly, I could not construct a Rust-only case for some reason, but this is still a breaking change nevertheless.

@japaric
Copy link
Member

japaric commented Sep 22, 2018

@nagisa your example needs #[used] to reliably work:

#![crate_type = "lib"]

#[no_mangle]
fn foo() -> u32 {
    42
}

#[used]
static KEEP: fn() -> u32 = foo;
$ nm -C foo.o
0000000000000000 t foo
0000000000000000 d foo::KEEP

Without #[used] foo is not kept in the object even when build without optimizations.

This is technically a breaking change but since #[used] just got stabilized (it's in beta right now) I think that if we can backport this PR into beta then no one on stable will experience this breaking change. If we don't backport then someone could write your example in 1.30 and then it would break in 1.31.

No, wait. You can make it work without #[used] on stable:

#![crate_type = "lib"]

#[inline(never)]
#[no_mangle]
fn foo() -> u32 {
    unsafe { std::ptr::read_volatile(&42) }
}

pub fn bar() -> u32 {
    foo()
}
$ rustc +stable --emit=obj -O foo.rs

$ nm -C foo.o
0000000000000000 t foo
0000000000000000 r .Lbyte_str.0
0000000000000000 T foo::bar

I can't think of a use case for something like but since this is technically a breaking change we may want do a crater run before landing this.

@alexcrichton
Copy link
Member Author

@bors: try

@bors
Copy link
Contributor

bors commented Sep 22, 2018

⌛ Trying commit 1cb4978c467ef68b8e453fb25dcf3b7da33effd3 with merge 90cdb0b2660ed428dec2f4a3f9bf083fdc2247e5...

@bors
Copy link
Contributor

bors commented Sep 22, 2018

☀️ Test successful - status-travis
State: approved= try=True

@nagisa
Copy link
Member

nagisa commented Sep 22, 2018

I doubt crater will uncover any breakage as it is more pertinent to binary crates which could possibly link multiple different versions of some dependency (both potentially containing the same #[no_mangle]d private symbol).

@nagisa
Copy link
Member

nagisa commented Sep 22, 2018

@japaric Neither #[used] nor retaining the symbol would be necessary in the example with this PR as they would make the symbol exported and globally available. I’m probably misunderstanding the point you’re trying to make.

@retep998
Copy link
Member

I'd be interested in whether there even are any crates that legitimately have private #[no_mangle] symbols. It seems like an absolutely useless thing that nobody could ever possibly want, and could only be done by mistake..

@petrochenkov
Copy link
Contributor

Since there's still way to reset the linkage to internal with #[linkage] if necessary, then I assume it's ok to switch the default for #[no_mangle] items.

@@ -518,7 +518,7 @@ pub fn update_count_then_panic(msg: Box<dyn Any + Send>) -> ! {

/// A private no-mangle function on which to slap yer breakpoints.
#[no_mangle]
#[allow(private_no_mangle_fns)] // yes we get it, but we like breakpoints
#[cfg_attr(stage0, allow(private_no_mangle_fns))]
pub fn rust_panic(mut msg: &mut dyn BoxMeUp) -> ! {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rust_panic need not to be exposed as an external symbol.
(Also, I'm not sure why it's pub, it's not used anywhere outside of its module.)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah the #[no_mangle] here is sort of opportunistically trying to keep rust_panic as a symbol in the crate, but the new changes in this PR exported it a bit too aggressively, I've tweaked this although it will likely continue to not work too reliably.

@@ -352,7 +352,7 @@ impl<'a, 'tcx: 'a> ItemLikeVisitor<'tcx> for CollectPrivateImplItemsVisitor<'a,
// which are currently akin to allocator symbols.
let def_id = self.tcx.hir.local_def_id(item.id);
let codegen_attrs = self.tcx.codegen_fn_attrs(def_id);
if codegen_attrs.linkage.is_some() ||
if codegen_attrs.contains_extern_indicator() ||
Copy link
Contributor

@petrochenkov petrochenkov Sep 23, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't look correct, #[linkage] can be used to decrease visibilities as well, in this case we don't need to mark the item and everything it uses as reachable.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that #[linkage] is an unstable attribute and has always been sort of wonky with how everything else in the compiler has evolved over time. This is just preserving the original behavior currently.

TBH the #[linkage] attribute is basically buggy enough to not be worth using any more, it needs a larger overhaul than changing the behavior at this location to be usable.

(for example there's no way to control visibility, and it's also not well defined whether the attribute makes it reachable).

Would you be ok leaving these sorts of questions to a later PR?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok.

@alexcrichton
Copy link
Member Author

@craterbot run start=master#e7b5ba8661aa844a06c37f22d7af0afb1807d347 end=try#90cdb0b2660ed428dec2f4a3f9bf083fdc2247e5 mode=build-and-test

@craterbot
Copy link
Collaborator

👌 Experiment pr-54451 created and queued.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@Centril Centril added the relnotes Marks issues that should be documented in the release notes of the next release. label Oct 6, 2018
@bors
Copy link
Contributor

bors commented Oct 7, 2018

💔 Test failed - status-travis

@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 Oct 7, 2018
@rust-highfive
Copy link
Collaborator

The job x86_64-apple of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
[01:47:33] 
[01:47:33] ---- ../stdsimd/coresimd/macros.rs - coresimd::x86::__m128i (line 34) stdout ----
[01:47:33] error: linking with `cc` failed: signal: 4
[01:47:33]   |
[01:47:33]   = note: "cc" "-m64" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.0.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.1.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.2.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.3.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.4.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.5.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out.rust_out.7rcbfp3g-cgu.6.rcgu.o" "-o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctesta6ojGU/rust_out" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/x86_64-apple-darwin/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-lstd-f7dd09cf573f28a7" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-3048cc32a441c3bf.rlib" "-lSystem" "-lresolv" "-lpthread" "-lc" "-lm"
[01:47:33] 
[01:47:33] thread '../stdsimd/coresimd/macros.rs - coresimd::x86::__m128i (line 34)' panicked at 'couldn't compile the test', librustdoc/test.rs:333:13
[01:47:33] note: Run with `RUST_BACKTRACE=1` for a backtrace.
[01:47:33] 
[01:47:33] 
[01:47:33] ---- ../stdsimd/coresimd/macros.rs - coresimd::x86::__m128 (line 27) stdout ----
[01:47:33] error: linking with `cc` failed: signal: 4
[01:47:33]   |
[01:47:33]   = note: "cc" "-m64" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.0.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.1.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.2.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.3.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.4.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out.rust_out.7rcbfp3g-cgu.5.rcgu.o" "-o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestLk5uJ0/rust_out" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/x86_64-apple-darwin/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-lstd-f7dd09cf573f28a7" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-3048cc32a441c3bf.rlib" "-lSystem" "-lresolv" "-lpthread" "-lc" "-lm"
[01:47:33] 
[01:47:33] thread '../stdsimd/coresimd/macros.rs - coresimd::x86::__m128 (line 27)' panicked at 'couldn't compile the test', librustdoc/test.rs:333:13
[01:47:33] 
[01:47:33] ---- ../stdsimd/coresimd/macros.rs - coresimd::x86::__m128d (line 27) stdout ----
[01:47:33] ---- ../stdsimd/coresimd/macros.rs - coresimd::x86::__m128d (line 27) stdout ----
[01:47:33] error: linking with `cc` failed: signal: 4
[01:47:33]   |
[01:47:33]   = note: "cc" "-m64" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.0.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.1.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.2.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.3.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.4.rcgu.o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out.rust_out.7rcbfp3g-cgu.5.rcgu.o" "-o" "/var/folders/bb/n7t3rs157850byt_jfdcq9k80000gn/T/rustdoctestCuTIW3/rust_out" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/x86_64-apple-darwin/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1-std/release/deps" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib" "-lstd-f7dd09cf573f28a7" "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage1/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-3048cc32a441c3bf.rlib" "-lSystem" "-lresolv" "-lpthread" "-lc" "-lm"
[01:47:33] 
[01:47:33] thread '../stdsimd/coresimd/macros.rs - coresimd::x86::__m128d (line 27)' panicked at 'couldn't compile the test', librustdoc/test.rs:333:13
[01:47:33] 
[01:47:33] 
---
[01:47:33] test result: FAILED. 2162 passed; 3 failed; 8 ignored; 0 measured; 0 filtered out
[01:47:33] 
[01:47:33] 
[01:47:33] 
[01:47:33] command did not execute successfully: "/Users/travis/build/rust-lang/rust/build/x86_64-apple-darwin/stage0/bin/cargo" "test" "--target" "x86_64-apple-darwin" "-j" "4" "--release" "--locked" "--color" "always" "--features" "panic-unwind jemalloc backtrace profiler" "--manifest-path" "/Users/travis/build/rust-lang/rust/src/libstd/Cargo.toml" "-p" "core" "--"
[01:47:33] 
[01:47:33] 
[01:47:33] failed to run: /Users/travis/build/rust-lang/rust/build/bootstrap/debug/bootstrap test
[01:47:33] Build completed unsuccessfully in 0:49:09
[01:47:33] Build completed unsuccessfully in 0:49:09
[01:47:33] error: test failed, to rerun pass '--doc'
[01:47:33] make: *** [check] Error 1
travis_time:end:043d22e4:start=1538865548502650000,finish=1538872001768060000,duration=6453265410000

The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:16840e48
---
travis_fold:start:after_failure.2
travis_time:start:14c66a00
$ ls -lat $HOME/Library/Logs/DiagnosticReports/
total 1312
drwx------  22 travis  staff    748 Oct  7 00:05 .
-rw-------@  1 travis  staff  62272 Oct  7 00:05 a_2018-10-07-000517-1_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  37509 Oct  7 00:05 a_2018-10-07-000517_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  60414 Oct  7 00:05 a_2018-10-07-000513-1_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  37294 Oct  7 00:05 a_2018-10-07-000513_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10171 Oct  7 00:05 a_2018-10-07-000508_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff   9902 Oct  7 00:05 a_2018-10-07-000504_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff   9907 Oct  7 00:04 a_2018-10-07-000457_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff   9845 Oct  7 00:04 a_2018-10-07-000456_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10034 Oct  7 00:04 a_2018-10-07-000431_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  63130 Oct  7 00:04 a_2018-10-07-000423_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  65147 Oct  7 00:04 a_2018-10-07-000420-1_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  64334 Oct  7 00:04 a_2018-10-07-000420-2_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  63942 Oct  7 00:04 a_2018-10-07-000420_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  11760 Oct  7 00:02 a_2018-10-07-000219_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff   9926 Oct  7 00:01 a_2018-10-07-000134_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10333 Oct  7 00:00 a_2018-10-07-000023_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10513 Oct  6 23:59 a_2018-10-06-235927-1_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10515 Oct  6 23:59 a_2018-10-06-235927_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  10242 Oct  6 23:58 a_2018-10-06-235858_Traviss-Mac-1044.crash
-rw-------@  1 travis  staff  62272 Oct  6 23:57 a_2018-10-06-235719_Traviss-Mac-1044.crash
drwx------+ 15 travis  staff    510 Jan 25  2018 ..
travis_fold:end:after_failure.2
travis_fold:start:after_failure.3
travis_time:start:1d0fd88c
$ find $HOME/Library/Logs/DiagnosticReports -type f -name '*.crash' -not -name '*.stage2-*.crash' -not -name 'com.apple.CoreSimulator.CoreSimulatorService-*.crash' -exec printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" {} \; -exec head -750 {} \; -exec echo travis_fold":"end:crashlog \; || true
$ find $HOME/Library/Logs/DiagnosticReports -type f -name '*.crash' -not -name '*.stage2-*.crash' -not -name 'com.apple.CoreSimulator.CoreSimulatorService-*.crash' -exec printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" {} \; -exec head -750 {} \; -exec echo travis_fold":"end:crashlog \; || true
travis_fold:start:crashlog
/Users/travis/Library/Logs/DiagnosticReports/a_2018-10-06-235719_Traviss-Mac-1044.crash
Process:               a [51125]
Path:                  /Users/USER/*/a
Identifier:            a
Version:               0
Code Type:             X86-64 (Native)
Parent Process:        a [51123]
Responsible:           a [51125]
User ID:               501
Date/Time:             2018-10-06 23:57:18.435 +0000
OS Version:            Mac OS X 10.13.3 (17D47)
Anonymous UUID:        A91A3A70-3ADA-D7A9-5891-C1A67A5778E7
Anonymous UUID:        A91A3A70-3ADA-D7A9-5891-C1A67A5778E7
Time Awake Since Boot: 4800 seconds
System Integrity Protection: enabled
Crashed Thread:        0  Dispatch queue: com.apple.main-thread
Exception Type:        EXC_BAD_ACCESS (SIGABRT)
Exception Codes:       KERN_PROTECTION_FAILURE at 0x00007ffee8a8ad50
Exception Note:        EXC_CORPSE_NOTIFY
VM Regions Near 0x7ffee8a8ad50:
    Stack Guard            00007ffee8a89000-00007ffee8a8a000 [    4K] ---/rwx SM=NUL  
--> VM_ALLOCATE            00007ffee8a8a000-00007ffee8a8b000 [    4K] ---/rwx SM=NUL  
    Stack                  00007ffee8a8b000-00007ffeeca89000 [ 64.0M] rw-/rwx SM=COW  
abort() called
abort() called
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib         0x00007fff617f9e3e __pthread_kill + 10
1   libsystem_pthread.dylib        0x00007fff61938150 pthread_kill + 333
2   libsystem_c.dylib              0x00007fff61756312 abort + 127
3   a                              0x0000000103187689 std::sys::unix::abort_internal::h920319b3609835ff + 9
4   a                              0x000000010318bc0b std::sys_common::util::abort::h53eadd5a3111ea4a + 91
5   a                              0x000000010317ade6 std::sys::unix::stack_overflow::imp::signal_handler::hbb993e795b77e561 (.llvm.8727453075381608255) + 678
6   libsystem_platform.dylib       0x00007fff6192bf5a _sigtramp + 26
7   ???                            000000000000000000 0 + 0
8   a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
9   a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
10  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
11  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
12  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
13  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
14  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
15  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
16  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
17  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
18  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
19  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
20  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
21  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
22  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
23  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
24  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
25  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
26  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
27  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
28  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
29  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
30  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
31  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
32  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
33  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
34  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
35  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
36  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
37  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
38  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
39  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
40  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
41  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
42  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
43  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
44  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
45  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
46  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
47  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
48  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
49  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
50  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
51  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
52  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
53  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
54  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
55  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
56  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
57  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
58  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
59  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
60  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
61  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
62  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
63  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
64  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
65  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
66  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
67  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
68  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
69  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
70  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
71  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
72  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
73  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
74  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
75  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
76  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
77  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
78  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
79  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
80  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
81  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
82  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
83  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
84  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
85  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
86  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
87  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
88  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
89  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
90  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
91  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
92  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
93  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
94  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
95  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
96  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
97  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
98  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
99  a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
100 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
101 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
102 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
103 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
104 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
105 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
106 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
107 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
108 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
109 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
110 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
111 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
112 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
113 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
114 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
115 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
116 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
117 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
118 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
119 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
120 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
121 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
122 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
123 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
124 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
125 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
126 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
127 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
128 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
129 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
130 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
131 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
132 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
133 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
134 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
135 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
136 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
137 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
138 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
139 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
140 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
141 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
142 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
143 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
144 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
145 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
146 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
147 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
148 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
149 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
150 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
151 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
152 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
153 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
154 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
155 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
156 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
157 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
158 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
159 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
160 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
161 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
162 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
163 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
164 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
165 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
166 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
167 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
168 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
169 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
170 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
171 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
172 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
173 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
174 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
175 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
176 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
177 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
178 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
179 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
180 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
181 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
182 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
183 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
184 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
185 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
186 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
187 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
188 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
189 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
190 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
191 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
192 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
193 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
194 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
195 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
196 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
197 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
198 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
199 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
200 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
201 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
202 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
203 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
204 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
205 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
206 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
207 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
208 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
209 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
210 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
211 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
212 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
213 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
214 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
215 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
216 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
217 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
218 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
219 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
220 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
221 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
222 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
223 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
224 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
225 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
226 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
227 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
228 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
229 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
230 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
231 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
232 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
233 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
234 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
235 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
236 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
237 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
238 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
239 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
240 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
241 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
242 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
243 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
244 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
245 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
246 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
247 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
248 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
249 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
250 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
251 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
252 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
253 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
254 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
255 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
256 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
257 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
258 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
259 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
260 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
261 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
262 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
263 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
264 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
265 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
266 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
267 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
268 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
269 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
270 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
271 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
272 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
273 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
274 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
275 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
276 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
277 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
278 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
279 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
280 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
281 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
282 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
283 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
284 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
285 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
286 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
287 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
288 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
289 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
290 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
291 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
292 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
293 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
294 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
295 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
296 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
297 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
298 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
299 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
300 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
301 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
302 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
303 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
304 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
305 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
306 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
307 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
308 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
309 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
310 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
311 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
312 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
313 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
314 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
315 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
316 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
317 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
318 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
319 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
320 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
321 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
322 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
323 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
324 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
325 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
326 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
327 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
328 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
329 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
330 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
331 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
332 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
333 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
334 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
335 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
336 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
337 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
338 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
339 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
340 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
341 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
342 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
343 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
344 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
345 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
346 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
347 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
348 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
349 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
350 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
351 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
352 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
353 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
354 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
355 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
356 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
357 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
358 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
359 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
360 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
361 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
362 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
363 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
364 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
365 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
366 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
367 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
368 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
369 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
370 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
371 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
372 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
373 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
374 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
375 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
376 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
377 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
378 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
379 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
380 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
381 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
382 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
383 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
384 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
385 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
386 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
387 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
388 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
389 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
390 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
391 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
392 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
393 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
394 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
395 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
396 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
397 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
398 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
399 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
400 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
401 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
402 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
403 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
404 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
405 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
406 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
407 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
408 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
409 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
410 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
411 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
412 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
413 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
414 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
415 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
416 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
417 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
418 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
419 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
420 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
421 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
422 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
423 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
424 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
425 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
426 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
427 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
428 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
429 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
430 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
431 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
432 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
433 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
434 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
435 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
436 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
437 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
438 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
439 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
440 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34
441 a                              0x0000000103179062 stack_probes_lto::recurse::h6895313952b89569 + 34

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@alexcrichton
Copy link
Member Author

@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 Oct 7, 2018
@bors
Copy link
Contributor

bors commented Oct 7, 2018

⌛ Testing commit d7d7045 with merge 1342913...

bors added a commit that referenced this pull request Oct 7, 2018
…elwoerister

rustc: Allow `#[no_mangle]` anywhere in a crate

This commit updates the compiler to allow the `#[no_mangle]` (and
`#[export_name]` attributes) to be located anywhere within a crate.
These attributes are unconditionally processed, causing the compiler to
always generate an exported symbol with the appropriate name.

After some discussion on #54135 it was found that not a great reason
this hasn't been allowed already, and it seems to match the behavior
that many expect! Previously the compiler would only export a
`#[no_mangle]` symbol if it were *publicly reachable*, meaning that it
itself is `pub` and it's otherwise publicly reachable from the root of
the crate. This new definition is that `#[no_mangle]` *is always
reachable*, no matter where it is in a crate or whether it has `pub` or
not.

This should make it much easier to declare an exported symbol with a
known and unique name, even when it's an internal implementation detail
of the crate itself. Note that these symbols will persist beyond LTO as
well, always making their way to the linker.

Along the way this commit removes the `private_no_mangle_functions` lint
(also for statics) as there's no longer any need to lint these
situations. Furthermore a good number of tests were updated now that
symbol visibility has been changed.

Closes #54135
@bors
Copy link
Contributor

bors commented Oct 7, 2018

☀️ Test successful - status-appveyor, status-travis
Approved by: michaelwoerister
Pushing 1342913 to master...

@bors bors merged commit d7d7045 into rust-lang:master Oct 7, 2018
@alexcrichton alexcrichton deleted the no-mangle-extern-linkage branch October 8, 2018 19:59
japaric added a commit to rust-embedded/cortex-m-rt that referenced this pull request Oct 26, 2018
Thanks to rust-lang/rust#54451, which will be available in 1.31, these
attributes will work regardless of the visibility and reachability of the items.
bors bot added a commit to rust-embedded/cortex-m-rt that referenced this pull request Oct 26, 2018
141: entry/exception/interrupt: reachability restriction is 1.30-only r=therealprof a=japaric

Thanks to rust-lang/rust#54451, which will be available in 1.31, these
attributes will work regardless of the visibility and reachability of the items.

Co-authored-by: Jorge Aparicio <jorge@japaric.io>
moz-v2v-gh pushed a commit to mozilla/gecko-dev that referenced this pull request Dec 11, 2018
mykmelez pushed a commit to mykmelez/gecko that referenced this pull request Dec 12, 2018
@Centril Centril added this to the 1.31 milestone Apr 26, 2019
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified that referenced this pull request Oct 3, 2019
…st-lang/rust#54451. r=simonsapin

UltraBlame original commit: 37f24bab080b559284ec7d9108f112f6a97db45c
gecko-dev-updater pushed a commit to marco-c/gecko-dev-comments-removed that referenced this pull request Oct 3, 2019
…st-lang/rust#54451. r=simonsapin

UltraBlame original commit: 37f24bab080b559284ec7d9108f112f6a97db45c
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified-and-comments-removed that referenced this pull request Oct 3, 2019
…st-lang/rust#54451. r=simonsapin

UltraBlame original commit: 37f24bab080b559284ec7d9108f112f6a97db45c
adamgreig pushed a commit to rust-embedded/cortex-m that referenced this pull request Jan 12, 2022
Thanks to rust-lang/rust#54451, which will be available in 1.31, these
attributes will work regardless of the visibility and reachability of the items.
adamgreig pushed a commit to rust-embedded/cortex-m that referenced this pull request Jan 12, 2022
141: entry/exception/interrupt: reachability restriction is 1.30-only r=therealprof a=japaric

Thanks to rust-lang/rust#54451, which will be available in 1.31, these
attributes will work regardless of the visibility and reachability of the items.

Co-authored-by: Jorge Aparicio <jorge@japaric.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
relnotes Marks issues that should be documented in the release notes of the next release. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

#[used] and symbol visibility is unclear