rust-lang / rust-lang/rust

`unreachable_patterns` not emitted on macros generated by another crate's macro

Ouverte
#158,366 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

A-diagnostics A-lints A-patterns C-bug L-false-negative L-unreachable_patterns needs-triage T-compiler
Langage dominant
Rust
Étoiles
119k
Forks
16.2k
Métriques de merge des PR
Métriques de PR en attente

Description

I tried this code:

crate_a:

#[macro_export]
macro_rules! create_pats {
    () => {
        macro_rules! pat_a {
            () => {
                _
            };
        }
        macro_rules! pat_b {
            () => {
                _
            };
        }
    };
}

crate_b:

use crate_a::create_pats;

create_pats!();

#[deny(unreachable_patterns)]
fn demo(value: u8) -> i32 {
    match value {
        pat_a!() => 42,
        pat_b!() => 24,
    }
}

I expected to see this happen: unreachable_pattern error

error: unreachable pattern
  --> crate_a/src/lib.rs:11:17
   |
 6 |                 _
   |                 - matches any value
...
11 |                 _
   |                 ^ no value can reach this

  --> crate_b/src/main.rs:9:17
 9 |         pat_b!() => 24,
   |         -------- in this macro invocation
   |
note: the lint level is defined here
  --> src/main.rs:5:8
   |
 5 | #[deny(unreachable_patterns)]
   |        ^^^^^^^^^^^^^^^^^^^^
   = note: this error originates in the macro `pat_b` (in Nightly builds, run with -Z macro-backtrace for more info)

Instead, this happened: successful compilation

When the create_pats! macro is defined in crate_b, the lint is emitted as expected.

Meta

rustc --version --verbose:

rustc 1.98.0-nightly (b30f3df3b 2026-06-11)
binary: rustc
commit-hash: b30f3df3ba3c4c9de2f58f1a75dd9500b79b3f8d
commit-date: 2026-06-11
host: x86_64-unknown-linux-gnu
release: 1.98.0-nightly
LLVM version: 22.1.6

@rustbot label +A-diagnostics +A-lints +A-patterns +L-unreachable_patterns +T-compiler +L-false-negative

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par reproduire l’exemple à deux crates à l’aide de crate_a/src/lib.rs et crate_b/src/main.rs, puis comparez-le au cas où create_pats! est défini dans crate_b. Suivez la manière dont le lint unreachable_patterns est traité pour les macros générées entre crates. C’est terminé lorsque le bras pat_b!() est diagnostiqué comme inaccessible lorsque le lint est refusé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
rust
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
50/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.