error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:14:5
   |
LL |       hello!(hi);
   |       ----------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:14:12
   |
LL |     hello!(hi);
   |            ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:17:5
   |
LL |       hello!(hi hi);
   |       -------------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:17:12
   |
LL |     hello!(hi hi);
   |            ^^ ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:20:5
   |
LL |       hello!(hi hi hi);
   |       ----------------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:20:12
   |
LL |     hello!(hi hi hi);
   |            ^^ ^^ ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:23:5
   |
LL |       hello!(hi hey hi yo hi beep beep hi hi);
   |       ---------------------------------------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:23:12
   |
LL |     hello!(hi hey hi yo hi beep beep hi hi);
   |            ^^     ^^    ^^           ^^ ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:24:5
   |
LL |       hello!(hi there, hi how are you? hi... hi.);
   |       -------------------------------------------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:24:12
   |
LL |     hello!(hi there, hi how are you? hi... hi.);
   |            ^^        ^^              ^^    ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:25:5
   |
LL |       hello!(whoah. hi di hi di ho);
   |       ------------------------------ in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:25:19
   |
LL |     hello!(whoah. hi di hi di ho);
   |                   ^^    ^^

error: hello to you, too!
  --> $DIR/auxiliary/multispan.rs:31:1
   |
LL | / pub fn hello(input: TokenStream) -> TokenStream {
LL | |     if let Err(diag) = parse(input) {
LL | |         diag.emit();
LL | |     }
LL | |
LL | |     TokenStream::new()
LL | | }
   | |_^
   | 
  ::: $DIR/multispan.rs:26:5
   |
LL |       hello!(hi good hi and good bye);
   |       -------------------------------- in this macro invocation
   |
note: found these 'hi's
  --> $DIR/multispan.rs:26:12
   |
LL |     hello!(hi good hi and good bye);
   |            ^^      ^^

error: aborting due to 7 previous errors

