asdfasdf. asdf
asdfasdf. asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn. as dfg? hjkl iop! ert ernop
zx cvn. as dfg? hjkl iop! ert ernop

asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn.  as dfg?  hjkl iop!  ert  enop
zx cvn.  as dfg? hjkl iop! ert ernop

asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn.  as dfg? hjkl iop! ert  a


{
/* Make sure the previous comment leader is not removed. */
/* Make sure the previous comment leader is not removed. */
// Should the next comment leader be left alone? Yes.
// Should the next comment leader be left alone? Yes.
/* Here the comment leader should be left intact. */ // And so should this one.
/* Here the comment leader should be left intact. */ // And so should this one.
if (condition) // Remove the next comment leader! OK, I will.
    action();
if (condition) // Remove the next comment leader! OK, I will.
    action();
}


{
/* Make sure the previous comment leader is not removed.  */
/* Make sure the previous comment leader is not removed.  */
/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
// Should the next comment leader be left alone?  Yes.
// Should the next comment leader be left alone?  Yes.
/* Here the comment leader should be left intact. */ // And so should this one.
/* Here the comment leader should be left intact. */ // And so should this one.
if (condition) // Remove the next comment leader!  OK, I will.
    action();
if (condition) // Remove the next comment leader!  OK, I will.
    action();
int i = 7 /* foo *// 3 // comment
 ;
int i = 7 /* foo *// 3 // comment
 ;
># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.

Some code!// Make sure backspacing does not remove this comment leader.
}

