================
@@ -13273,6 +13273,22 @@ enum {
   ConstUnknown,  // Keep as last element
 };
 
+static void MaybeSuggestDerefFixIt(Sema &S, const Expr *E, SourceLocation Loc) 
{
+  ExprResult Deref;
+  Expr *TE = const_cast<Expr *>(E);
+  {
+    Sema::TentativeAnalysisScope Trap(S);
+    Deref = S.ActOnUnaryOp(S.getCurScope(), Loc, tok::star, TE);
+  }
+  if (Deref.isUsable() &&
+      Deref.get()->isModifiableLvalue(S.Context, &Loc) == Expr::MLV_Valid &&
+      !E->getType()->isObjCObjectPointerType()) {
+    S.Diag(Loc, diag::note_typecheck_add_deref_star_not_modifiable_lvalue)
----------------
Sirraide wrote:

```suggestion
    S.Diag(E->getBeginLoc(), 
diag::note_typecheck_add_deref_star_not_modifiable_lvalue)
```
Just checked this out locally, and currently, we’re printing e.g.
```
/tmp/test.cc:1:30: note: add '*' to dereference it
    1 | void f(int* const sasasas) { sasasas = 23; }
      |                              ~~~~~~~ ^
      |                              *
```
The caret looks a bit misplaced there because we’re using the location of the 
assignment for this (which makes sense for the actual error), but for this 
note, we should probably juse use the location of the lvalue. Changing this to 
`E->getBeginLoc()` gives:
```
/tmp/test.cc:1:30: note: add '*' to dereference it
    1 | void f(int* const sasasas) { sasasas = 23; }
      |                              ^~~~~~~
      |                              *
```
which I think looks a bit nicer personally.

https://github.com/llvm/llvm-project/pull/94159
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to