diff --git a/crates/mbe/src/expander/matcher.rs b/crates/mbe/src/expander/matcher.rs
index 910724411d4..074407ea74b 100644
--- a/crates/mbe/src/expander/matcher.rs
+++ b/crates/mbe/src/expander/matcher.rs
@@ -697,6 +697,7 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
         "block" => parser::PrefixEntryPoint::Block,
         "meta" => parser::PrefixEntryPoint::MetaItem,
         "item" => parser::PrefixEntryPoint::Item,
+        "vis" => parser::PrefixEntryPoint::Vis,
         "expr" => {
             return input
                 .expect_fragment(parser::PrefixEntryPoint::Expr)
@@ -728,8 +729,6 @@ fn match_meta_var(kind: &str, input: &mut TtIter) -> ExpandResult<Option<Fragmen
                         })
                         .map_err(|()| err!())
                 }
-                // `vis` is optional
-                "vis" => Ok(input.expect_fragment(parser::PrefixEntryPoint::Vis).value),
                 _ => Err(ExpandError::UnexpectedToken),
             };
             return tt_result.map(|it| it.map(Fragment::Tokens)).into();
diff --git a/crates/mbe/src/tt_iter.rs b/crates/mbe/src/tt_iter.rs
index 172916c5a14..9d2b1da9abd 100644
--- a/crates/mbe/src/tt_iter.rs
+++ b/crates/mbe/src/tt_iter.rs
@@ -114,7 +114,7 @@ impl<'a> TtIter<'a> {
             }
         }
 
-        let mut err = if !cursor.is_root() || error {
+        let err = if error || !cursor.is_root() {
             Some(err!("expected {:?}", entry_point))
         } else {
             None
@@ -132,9 +132,6 @@ impl<'a> TtIter<'a> {
             }
         }
         self.inner = self.inner.as_slice()[res.len()..].iter();
-        if res.is_empty() && err.is_none() {
-            err = Some(err!("no tokens consumed"));
-        }
         let res = match res.len() {
             1 => Some(res[0].cloned()),
             0 => None,