Skip to content

undefined reference to thread local variable in generic function #73088

@Freax13

Description

@Freax13

I tried this code:

#![feature(thread_local)] #[thread_local] static FOO: usize = 0; fn generic_fn<T>() { println!("{}", FOO); } fn main() { generic_fn::<u32>(); }

I expected to see this happen: the code compiles and runs

Instead, this happened: the linker fails with "undefined reference to `bug_thread_local::FOO'"

Meta

rustc --version --verbose:

rustc 1.46.0-nightly (118b50524 2020-06-06) binary: rustc commit-hash: 118b50524b79e565f017e08bce9b90a16c63634f commit-date: 2020-06-06 host: x86_64-unknown-linux-gnu release: 1.46.0-nightly LLVM version: 10.0 
backtrace

 Compiling bug_thread_local v0.1.0 (/coding/rust/bugs/bug_thread_local) error: linking with `cc` failed: exit code: 1 | = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.15r157f46nq5mrlc.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.1bura74fpes4wgex.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.1wbud65q9h6ajgnf.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.46em5a1xf4kr89y6.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.4gwkhmnlmutobbpo.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.4ibtg096vtr9owgz.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.4ohtqtdpema17ct9.rcgu.o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.56dvc5ml437kyb48.rcgu.o" "-o" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698" "/coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.2zba00a95gi8ssj6.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/coding/rust/bugs/bug_thread_local/target/debug/deps" "-L" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-e57211332ec73a2f.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-419d4801030b1e5f.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-cfc1286528e69dbf.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-bb34cb18a72ef92e.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-06bd58cc4eea83a6.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-a5f6d70e9e31f670.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-9d8ebec41dc1a913.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-d4969954aa8384d6.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-f0a7e8cab2b30e63.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-95ea48ddc44a311b.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-7932c3ccaf0b0992.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-68f423c59dc48a40.rlib" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-54580c7798bf2225.rlib" "-Wl,--end-group" "/home/freax13/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-b5efcd4dc107fc39.rlib" "-Wl,-Bdynamic" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil" = note: /usr/bin/ld: /coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698.4gwkhmnlmutobbpo.rcgu.o: in function `bug_thread_local::generic_fn': /coding/rust/bugs/bug_thread_local/src/main.rs:7: undefined reference to `bug_thread_local::FOO' /usr/bin/ld: /coding/rust/bugs/bug_thread_local/target/debug/deps/bug_thread_local-c8ea200706a99698: hidden symbol `_ZN16bug_thread_local3FOO17h1facba36a04dea80E' isn't defined /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status error: aborting due to previous error error: could not compile `bug_thread_local`. To learn more, run the command again with --verbose. 

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-linkageArea: linking into static, shared libraries and binariesA-thread-localsArea: Thread local storage (TLS)C-bugCategory: This is a bug.F-thread_local`#![feature(thread_local)]`T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions