clang-format: fix a crash in comment wraps.
authorMartin Probst <martin@probst.io>
Thu, 2 Aug 2018 11:52:08 +0000 (11:52 +0000)
committerMartin Probst <martin@probst.io>
Thu, 2 Aug 2018 11:52:08 +0000 (11:52 +0000)
commit9d7178139c4c8d28818cb48af7c0b01fda49d60e
tree845ed7c2cecd8e12a79ba40ec5942ab20a5164f4
parent1a721eb3a21f9950e7c6c3103eac6928f829b864
clang-format: fix a crash in comment wraps.

Summary:
Previously, clang-format would crash if it tried to wrap an overlong
single line comment, because two parts of the code inserted a break in
the same location.

    /** heregoesalongcommentwithnospace */

This wasn't previously noticed as it could only trigger for an overlong
single line comment that did have no breaking opportunities except for a
whitespace at the very beginning.

This also introduces a check for JavaScript to not ever wrap a comment
before an opening curly brace:

    /** @mods {donotbreakbeforethecurly} */

This is because some machinery parsing these tags sometimes supports
breaks before a possible `{`, but in some other cases does not.
Previously clang-format was careful never to wrap a line with certain
tags on it. The better solution is to specifically disable wrapping
before the problematic token: this allows wrapping and aligning comments
but still avoids the problem.

Reviewers: krasimir

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D50177

llvm-svn: 338706
clang/lib/Format/BreakableToken.cpp
clang/unittests/Format/FormatTestComments.cpp
clang/unittests/Format/FormatTestJS.cpp