From adcb37e275ee9b06114d4debdfe453cbc89b7716 Mon Sep 17 00:00:00 2001 From: varkor Date: Fri, 26 Jan 2018 15:39:19 +0000 Subject: [PATCH] Add clarifying comment regarding the trailing type of a block --- src/librustc_mir/build/block.rs | 4 ++++ src/test/run-pass/never-type-rvalues.rs | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/build/block.rs b/src/librustc_mir/build/block.rs index f8718c36ede9..ef30b1e45223 100644 --- a/src/librustc_mir/build/block.rs +++ b/src/librustc_mir/build/block.rs @@ -143,6 +143,10 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { if let Some(expr) = expr { unpack!(block = this.into(destination, block, expr)); } else { + // If a block has no trailing expression, then it is given an implicit return type. + // This return type is usually `()`, unless the block is diverging, in which case the + // return type is `!`. For the unit type, we need to actually return the unit, but in + // the case of `!`, no return value is required, as the block will never return. let tcx = this.hir.tcx(); let ty = destination.ty(&this.local_decls, tcx).to_ty(tcx); if ty.is_nil() { diff --git a/src/test/run-pass/never-type-rvalues.rs b/src/test/run-pass/never-type-rvalues.rs index 9bf003ee1dd3..bda288f40869 100644 --- a/src/test/run-pass/never-type-rvalues.rs +++ b/src/test/run-pass/never-type-rvalues.rs @@ -1,4 +1,4 @@ -// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. //