[PATCH] D21075: Correct invalid end location in diagnostics for some identifiers.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 26 12:50:49 PDT 2016


rsmith added inline comments.


================
Comment at: lib/Sema/SemaExpr.cpp:2061-2062
+  auto Builder = Diag(R.getNameLoc(), diagnostic) << Name;
+  if (Name.isIdentifier())
+    Builder << SourceRange(R.getNameLoc());
   return true;
----------------
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.


================
Comment at: lib/Sema/SemaType.cpp:1339
+        auto R = DS.getSourceRange();
+        if (R.getEnd().isInvalid())
+          R.setEnd(R.getBegin());
----------------
klimek wrote:
> erikjv wrote:
> > klimek wrote:
> > > Do you know in which cases we get source ranges that are half valid?
> > In Parser::ParseTypeofSpecifier the 'cast range' for a typeof(...) is parsed, but is found to be invalid. Then it explicitly sets the DeclSpec's end location to an invalid location.
> Ok, in this case, we'll need Richard to verify whether he intended half-valid source locations something that users need to deal with.
The code in `ParseTypeofSpecifier` does this:

```
  if (CastRange.getEnd().isInvalid())
    // FIXME: Not accurate, the range gets one token more than it should.
    DS.SetRangeEnd(Tok.getLocation());
  else
    DS.SetRangeEnd(CastRange.getEnd());
```

This should always set the end of the range to a valid location. Generally, I think we should avoid half-valid ranges rather than trying to cope with them downstream.


https://reviews.llvm.org/D21075





More information about the cfe-commits mailing list