From eabbe202aa442841964df0b5280e52161ddada95 Mon Sep 17 00:00:00 2001 From: Aryan Baranwal Date: Sat, 25 Apr 2026 16:53:45 +0530 Subject: [PATCH] fix(sema): reject target gated builtin methods on wrong target Signed-off-by: Aryan Baranwal --- src/sema/builtin.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/sema/builtin.rs b/src/sema/builtin.rs index 91d68758a..6b369f712 100644 --- a/src/sema/builtin.rs +++ b/src/sema/builtin.rs @@ -1445,7 +1445,11 @@ pub(super) fn resolve_method_call( let deref_ty = expr_ty.deref_memory(); let funcs: Vec<_> = BUILTIN_METHODS .iter() - .filter(|func| func.name == id.name && func.method.contains(deref_ty)) + .filter(|func| { + func.name == id.name + && func.method.contains(deref_ty) + && (func.target.is_empty() || func.target.contains(&ns.target)) + }) .collect(); // try to resolve the arguments, give up if there are any errors @@ -1523,6 +1527,19 @@ pub(super) fn resolve_method_call( } if funcs.is_empty() { + if BUILTIN_METHODS + .iter() + .any(|func| func.name == id.name && func.method.contains(deref_ty)) + { + diagnostics.push(Diagnostic::error( + id.loc, + format!( + "method '{}' is not available on target {}", + id.name, ns.target + ), + )); + return Err(()); + } Ok(None) } else { diagnostics.extend(call_diagnostics);