[cfe-commits] PATCH #2 for "[sema++] clang should give a fixit for */& mismatch"
Douglas Gregor
dgregor at apple.com
Wed Jul 27 14:35:04 PDT 2011
On Jul 22, 2011, at 11:41 AM, Anna Zaks wrote:
> Attached are 3 patches that add more support for adding */& mismatch fixits. In particular, C function parameters would get handled as well as assignments in general.
>
> 1) In the first patch, I refactored most of the fixit generation functionality out of SemaOverload and provided a simple conversion checking function. This patch also includes a bug fix - the range for FixItHint::CreateRemoval was not specified correctly.
> <deref_addof_refactor.diff>
+ typedef bool (*TypeComparisonFuncTy) (const CanQualType FromTy,
+ const CanQualType ToTy,
+ Sema &S,
+ SourceLocation Loc,
+ ExprValueKind VK);
Could you name 'VK' something like 'FromVK', so we know which type the value kind refers to?
+ bool NeedParen = true;
+ if (isa<ParenExpr>(FullExpr) ||
+ isa<DeclRefExpr>(Expr) ||
+ isa<ArraySubscriptExpr>(Expr) ||
+ isa<CallExpr>(Expr) ||
+ isa<MemberExpr>(Expr))
+ NeedParen = false;
+ if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(Expr))
+ if (UO->isPostfix())
+ NeedParen = false;
I'd prefer if you did an audit of the various expression kinds we have in Clang, so that you can white-list all of the ones that don't need to be parenthesized here. Otherwise, we're setting ourselves up for a long tail of QoI bugs where Clang suggests parentheses unnecessarily. (We don't need test cases for every expression kind noted here, of course).
Index: lib/Sema/SemaFixItUtils.cpp
===================================================================
--- lib/Sema/SemaFixItUtils.cpp (revision 0)
+++ lib/Sema/SemaFixItUtils.cpp (revision 0)
@@ -0,0 +1,145 @@
+//===--- SemaFixItUtils.cpp - Sema FixIts ---------------------------------===//
Please add this .cpp file to lib/Sema/CMakeLists.txt.
With those minor tweaks, please go ahead and commit this patch!
> 2) This one adds fixit generation to the Sema::DiagnoseAssignmentResult().
> <deref_addof_assign.diff>
> 3) Test the fixits generated as a result of patch #2.
> <deref_addof_assign_tests.diff>
These two look great, thanks!
- Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20110727/1f1c87eb/attachment.html>
More information about the cfe-commits
mailing list