about summary refs log tree commit diff
path: root/compiler/rustc_ast_passes
diff options
context:
space:
mode:
authorFolkert de Vries <folkert@folkertdev.nl>2025-09-06 17:19:01 +0200
committerFolkert de Vries <folkert@folkertdev.nl>2025-09-08 18:41:22 +0200
commit7075000ae72c3ead855dc660a37c6bf263b7b452 (patch)
tree4dbb9db246b410aa29ca735372e8792a1d2215ac /compiler/rustc_ast_passes
parenta093372e5e560b1a768971c2b87b306755f2c17d (diff)
downloadrust-7075000ae72c3ead855dc660a37c6bf263b7b452.tar.gz
rust-7075000ae72c3ead855dc660a37c6bf263b7b452.zip
clarify control flow of `check_c_variadic_type`
Diffstat (limited to 'compiler/rustc_ast_passes')
-rw-r--r--compiler/rustc_ast_passes/src/ast_validation.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/compiler/rustc_ast_passes/src/ast_validation.rs b/compiler/rustc_ast_passes/src/ast_validation.rs
index c5c23c47e74..79947b514b1 100644
--- a/compiler/rustc_ast_passes/src/ast_validation.rs
+++ b/compiler/rustc_ast_passes/src/ast_validation.rs
@@ -697,14 +697,23 @@ impl<'a> AstValidator<'a> {
         match fn_ctxt {
             FnCtxt::Foreign => return,
             FnCtxt::Free => match sig.header.ext {
-                Extern::Explicit(StrLit { symbol_unescaped: sym::C, .. }, _)
-                | Extern::Explicit(StrLit { symbol_unescaped: sym::C_dash_unwind, .. }, _)
-                | Extern::Implicit(_)
-                    if matches!(sig.header.safety, Safety::Unsafe(_)) =>
-                {
-                    return;
+                Extern::Implicit(_) => {
+                    if matches!(sig.header.safety, Safety::Unsafe(_)) {
+                        return;
+                    }
+
+                    self.dcx().emit_err(errors::BadCVariadic { span: variadic_param.span });
+                }
+                Extern::Explicit(StrLit { symbol_unescaped, .. }, _) => {
+                    if matches!(symbol_unescaped, sym::C | sym::C_dash_unwind) {
+                        if matches!(sig.header.safety, Safety::Unsafe(_)) {
+                            return;
+                        }
+                    }
+
+                    self.dcx().emit_err(errors::BadCVariadic { span: variadic_param.span });
                 }
-                _ => {
+                Extern::None => {
                     self.dcx().emit_err(errors::BadCVariadic { span: variadic_param.span });
                 }
             },