diff --git a/src/librustc_parse/parser/item.rs b/src/librustc_parse/parser/item.rs
index 31db7fc5f759d..b55756d8129de 100644
--- a/src/librustc_parse/parser/item.rs
+++ b/src/librustc_parse/parser/item.rs
@@ -1638,26 +1638,32 @@ impl<'a> Parser<'a> {
             .span_to_snippet(self.prev_span)
             .map(|s| s.ends_with(")") || s.ends_with("]"))
             .unwrap_or(false);
-        let right_brace_span = if has_close_delim {
-            // it's safe to peel off one character only when it has the close delim
-            self.prev_span.with_lo(self.prev_span.hi() - BytePos(1))
-        } else {
-            self.prev_span.shrink_to_hi()
-        };
 
-        self.struct_span_err(
+        let mut err = self.struct_span_err(
             self.prev_span,
             "macros that expand to items must be delimited with braces or followed by a semicolon",
-        )
-        .multipart_suggestion(
-            "change the delimiters to curly braces",
-            vec![
-                (self.prev_span.with_hi(self.prev_span.lo() + BytePos(1)), "{".to_string()),
-                (right_brace_span, '}'.to_string()),
-            ],
-            Applicability::MaybeIncorrect,
-        )
-        .span_suggestion(
+        );
+
+        // To avoid ICE, we shouldn't emit actual suggestions when it hasn't closing delims
+        if has_close_delim {
+            err.multipart_suggestion(
+                "change the delimiters to curly braces",
+                vec![
+                    (self.prev_span.with_hi(self.prev_span.lo() + BytePos(1)), '{'.to_string()),
+                    (self.prev_span.with_lo(self.prev_span.hi() - BytePos(1)), '}'.to_string()),
+                ],
+                Applicability::MaybeIncorrect,
+            );
+        } else {
+            err.span_suggestion(
+                self.prev_span,
+                "change the delimiters to curly braces",
+                " { /* items */ }".to_string(),
+                Applicability::HasPlaceholders,
+            );
+        }
+
+        err.span_suggestion(
             self.prev_span.shrink_to_hi(),
             "add a semicolon",
             ';'.to_string(),
diff --git a/src/test/ui/parser/issue-62524.stderr b/src/test/ui/parser/issue-62524.stderr
index 3482435cd1d03..8191c9682cefd 100644
--- a/src/test/ui/parser/issue-62524.stderr
+++ b/src/test/ui/parser/issue-62524.stderr
@@ -16,9 +16,8 @@ LL | | Ϥ,
    |
 help: change the delimiters to curly braces
    |
-LL | y!{
-LL | Ϥ}
-   |
+LL | y! { /* items */ }
+   |    ^^^^^^^^^^^^^^^
 help: add a semicolon
    |
 LL | Ϥ,;
diff --git a/src/test/ui/parser/issue-68629.rs b/src/test/ui/parser/issue-68629.rs
new file mode 100644
index 0000000000000..672a31f12c838
Binary files /dev/null and b/src/test/ui/parser/issue-68629.rs differ
diff --git a/src/test/ui/parser/issue-68629.stderr b/src/test/ui/parser/issue-68629.stderr
new file mode 100644
index 0000000000000..a7885ecec5647
Binary files /dev/null and b/src/test/ui/parser/issue-68629.stderr differ
diff --git a/src/test/ui/parser/mbe_missing_right_paren.stderr b/src/test/ui/parser/mbe_missing_right_paren.stderr
index c5b3cc275ce9a..4ce39de886649 100644
--- a/src/test/ui/parser/mbe_missing_right_paren.stderr
+++ b/src/test/ui/parser/mbe_missing_right_paren.stderr
@@ -14,8 +14,8 @@ LL | macro_rules! abc(ؼ
    |
 help: change the delimiters to curly braces
    |
-LL | macro_rules! abc{ؼ}
-   |                 ^ ^
+LL | macro_rules! abc { /* items */ }
+   |                  ^^^^^^^^^^^^^^^
 help: add a semicolon
    |
 LL | macro_rules! abc(ؼ;