Skip to content

no_mangle_const_items: const -> pub static suggestion causes syntax error #149511

@matthiaskrgr

Description

@matthiaskrgr

Using the following flags

--force-warn no_mangle_const_items

this code:

//! Test that nonsense bounds prevent consts from being evaluated at all.
//@ check-pass

#![feature(generic_const_items)]
#![allow(incomplete_features)]
trait Trait {
    const ASSOC: u32;
}

// rustfmt eats the where bound
#[unsafe(no_mangle)]
const ASSOC: u32 = <&'static ()>::ASSOC where for<'a> &'a (): Trait;

fn main() {}

caused the following diagnostics:

    Checking _23d74b92f51a14cefeb40f5cad7a397b39971b5d v0.1.0 (/tmp/icemaker_global_tempdir.fzTw1TOrsbiL/icemaker_clippyfix_tempdir.xP3b20GgdVBR/_23d74b92f51a14cefeb40f5cad7a397b39971b5d)
warning: const items should never be `#[no_mangle]`
  --> src/main.rs:12:1
   |
12 | const ASSOC: u32 = <&'static ()>::ASSOC where for<'a> &'a (): Trait;
   | -----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   | |
   | help: try a static value: `pub static`
   |
   = note: requested on the command line with `--force-warn no-mangle-const-items`

warning: `_23d74b92f51a14cefeb40f5cad7a397b39971b5d` (bin "_23d74b92f51a14cefeb40f5cad7a397b39971b5d") generated 1 warning (run `cargo clippy --fix --bin "_23d74b92f51a14cefeb40f5cad7a397b39971b5d" -p _23d74b92f51a14cefeb40f5cad7a397b39971b5d` to apply 1 suggestion)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.21s

However after applying these diagnostics, the resulting code:

//! Test that nonsense bounds prevent consts from being evaluated at all.
//@ check-pass

#![feature(generic_const_items)]
#![allow(incomplete_features)]
trait Trait {
    const ASSOC: u32;
}

// rustfmt eats the where bound
#[unsafe(no_mangle)]
pub static ASSOC: u32 = <&'static ()>::ASSOC where for<'a> &'a (): Trait;

fn main() {}

no longer compiled:

    Checking _23d74b92f51a14cefeb40f5cad7a397b39971b5d v0.1.0 (/tmp/icemaker_global_tempdir.fzTw1TOrsbiL/icemaker_clippyfix_tempdir.xP3b20GgdVBR/_23d74b92f51a14cefeb40f5cad7a397b39971b5d)
error: expected one of `!`, `.`, `::`, `;`, `?`, `{`, or an operator, found keyword `where`
  --> src/main.rs:12:46
   |
12 | pub static ASSOC: u32 = <&'static ()>::ASSOC where for<'a> &'a (): Trait;
   |                                              ^^^^^ expected one of 7 possible tokens

error: could not compile `_23d74b92f51a14cefeb40f5cad7a397b39971b5d` (bin "_23d74b92f51a14cefeb40f5cad7a397b39971b5d") due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error: could not compile `_23d74b92f51a14cefeb40f5cad7a397b39971b5d` (bin "_23d74b92f51a14cefeb40f5cad7a397b39971b5d" test) due to 1 previous error

Version:

rustc 1.93.0-nightly (f40a70d2b 2025-11-30)
binary: rustc
commit-hash: f40a70d2bcd830a4f1f8c7ca1a7f93f1d9d703d6
commit-date: 2025-11-30
host: x86_64-unknown-linux-gnu
release: 1.93.0-nightly
LLVM version: 21.1.5

Metadata

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`D-invalid-suggestionDiagnostics: A structured suggestion resulting in incorrect code.E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.F-generic_const_items`#![feature(generic_const_items)]`T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

Status

Can Do

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions