Skip to content

Commit a97f41f

Browse files
committed
don't ICE on variadic function calls
1 parent b815532 commit a97f41f

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

Diff for: compiler/rustc_const_eval/src/interpret/terminator.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,15 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
331331
// `find_mir_or_eval_fn`.
332332
// FIXME: for variadic support, do we have to somehow determine calle's extra_args?
333333
let callee_fn_abi = self.fn_abi_of_instance(instance, ty::List::empty())?;
334-
assert!(!callee_fn_abi.c_variadic);
335-
assert!(!caller_fn_abi.c_variadic);
334+
335+
if callee_fn_abi.c_variadic != caller_fn_abi.c_variadic {
336+
throw_ub_format!(
337+
"calling a c-variadic function via a non-variadic call site, or vice versa"
338+
);
339+
}
340+
if callee_fn_abi.c_variadic {
341+
throw_unsup_format!("calling a c-variadic function is not supported");
342+
}
336343

337344
if M::enforce_abi(self) {
338345
if caller_fn_abi.conv != callee_fn_abi.conv {

0 commit comments

Comments
 (0)