diff options
| author | Folkert de Vries <folkert@folkertdev.nl> | 2025-09-08 18:45:41 +0200 |
|---|---|---|
| committer | Folkert de Vries <folkert@folkertdev.nl> | 2025-09-09 21:30:38 +0200 |
| commit | 0c96200f268df10d4f3ac102f3161c67e5e67221 (patch) | |
| tree | bfb8cc16075c6a8f1e8a0e53368fae4d2b89c4bb /compiler/rustc_ast | |
| parent | 5de9bc73e76f60ee27c37f20d0a9530e5a957df7 (diff) | |
| download | rust-0c96200f268df10d4f3ac102f3161c67e5e67221.tar.gz rust-0c96200f268df10d4f3ac102f3161c67e5e67221.zip | |
c-variadic: reject non-unsafe functions
Diffstat (limited to 'compiler/rustc_ast')
| -rw-r--r-- | compiler/rustc_ast/src/ast.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs index 2733a2603d6..915bae9e5f5 100644 --- a/compiler/rustc_ast/src/ast.rs +++ b/compiler/rustc_ast/src/ast.rs @@ -2309,6 +2309,22 @@ impl FnSig { self.span.shrink_to_lo() } + + /// The span of the header's safety, or where to insert it if empty. + pub fn safety_span(&self) -> Span { + match self.header.safety { + Safety::Unsafe(span) | Safety::Safe(span) => span, + Safety::Default => { + // Insert after the `coroutine_kind` if available. + if let Some(extern_span) = self.header.ext.span() { + return extern_span.shrink_to_lo(); + } + + // Insert right at the front of the signature. + self.header_span().shrink_to_hi() + } + } + } } /// A constraint on an associated item. @@ -3553,6 +3569,13 @@ impl Extern { None => Extern::Implicit(span), } } + + pub fn span(self) -> Option<Span> { + match self { + Extern::None => None, + Extern::Implicit(span) | Extern::Explicit(_, span) => Some(span), + } + } } /// A function header. |
