rsmith added a comment. In D36357#1501999 <https://reviews.llvm.org/D36357#1501999>, @Rakete1111 wrote:
> In D36357#1501961 <https://reviews.llvm.org/D36357#1501961>, @rsmith wrote: > > > In D36357#1500949 <https://reviews.llvm.org/D36357#1500949>, @Rakete1111 > > wrote: > > > > > How should I do this? Do I just skip to the next `}`, or also take into > > > account any additional scopes? Also does this mean that I skip and then > > > revert, because that seems pretty expensive? > > > > > > It would be a little expensive, yes, but we'd only be doing it on codepaths > > where we're producing an error -- for an ill-formed program, it's OK to > > take more time in order to produce a better diagnostic. Skipping to the > > next `}` won't work, because `SkipUntil` will skip over pairs of > > brace-balanced tokens (so you'll skip past the `}` you're looking for), but > > skipping until the next `{` and then skipping to the `}` after it should > > work. > > > Hmm wouldn't this interact badly with `{}` in initializers? > > []<int = {0}> {}; > [](int = {0}) {}; > Ouch. The first of these two seems like it won't work, since `SkipUntil` has no idea the angles are brackets. =( Getting this right is ... really hairy. Eg: []<bool = a<b>{} // end of lambda here? >(){} // or here? (The answer depends on whether `a` is a template.) And the same problem shows up in the //trailing-return-type// and the //requires-clause//. How about this: `SkipUntil` an `{` or `<`. If you find a `<` first, don't attach a `FixItHint` to the diagnostic since we can't easily tell where to suggest putting the `)`. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D36357/new/ https://reviews.llvm.org/D36357 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits