================ @@ -13273,6 +13273,23 @@ 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(E->getBeginLoc(), + diag::note_typecheck_add_deref_star_not_modifiable_lvalue) + << E->getSourceRange() + << FixItHint::CreateInsertion(E->getBeginLoc(), "*"); ---------------- zygoloid wrote:
We shouldn't be suggesting adding a `*` unless that would actually make sense in context. Eg, given: ```c++ const int *const p; const int *const q; p = q; ``` ... we should not suggest a dereference -- the problem is clearly that `p` is `const`, and adding a `*` doesn't help. I suspect we simply don't have enough information to do this from within `CheckForModifiableLvalue`. 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