rsmith added inline comments.

================
Comment at: lib/Parse/ParseDecl.cpp:2702
     DS.SetRangeStart(Tok.getLocation());
-    DS.SetRangeEnd(SourceLocation());
+    DS.SetRangeEnd(Tok.getLocation());
   }
----------------
This doesn't look right: this is a source range containing exactly one token. 
If we don't have *any* decl-specifiers (such as for a constructor, destructor, 
or conversion function), this is the wrong range.

How about instead setting the start location to be invalid in 
`DeclSpec::Finish` if the end location is invalid?


================
Comment at: lib/Sema/SemaExpr.cpp:2061-2062
+  auto Builder = Diag(R.getNameLoc(), diagnostic) << Name;
+  if (Name.isIdentifier())
+    Builder << SourceRange(R.getNameLoc());
   return true;
----------------
erikjv wrote:
> rsmith wrote:
> > I'm indifferent on this change: I don't see much point in adding a 
> > single-token range when we already point the caret at that token, but I 
> > don't see any harm either.
> It's mostly about how much is "underlined". If there is only a caret, that 
> quite often translates into a single character being pointed out, instead of 
> an identifier (i.e. the first character). Hene the extension of the range.
A `^` with no `~`s should be interpreted as indicating a location, not 
highlighting a single character. We use that pattern in a huge number of 
diagnostics; it doesn't make sense to do something different here.

I also don't think this is the correct range to underline. If the name 
comprises multiple tokens (such as `operator int`), this will incorrectly 
highlight only the first one. A wrong underline seems worse than no underline.


https://reviews.llvm.org/D21075



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to