[cfe-commits] [PATCH] Warn on function-to-bool conversion.

Douglas Gregor dgregor at apple.com
Sat Dec 3 12:40:21 PST 2011


On Dec 1, 2011, at 7:22 PM, Lang Hames wrote:

> Oops - left my test case out of the previous patch.

A few comments:

+def warn_impcast_function_to_bool : Warning<
+    "in implicit conversion to bool, "
+    "the address of %q0 will always evaluate to 'true'">,
+    InGroup<BoolConversions>;

It's a little wordy. How about "address of function %q0 will always evaluate 'true'"?

+      if (D && !D->isWeakImported()) {
+        FunctionDecl* F = cast<FunctionDecl>(D);
+        S.Diag(E->getExprLoc(), diag::warn_impcast_function_to_bool)
+          << F << E->getSourceRange() << SourceRange(CC);
+        return;
+      }

There are other "weak" cases here. Check out the IsWeakDecl predicate in ExprConstant.cpp; I suggest making that available so you can re-use it here.

Otherwise, it looks good. I actually don't want us to diagnose

	if (&f)

because I expected that it's intentional more often than not (because, for example, "f" might be weak on some systems but not on others).

	- Doug

> - Lang.
> 
> On Thu, Dec 1, 2011 at 7:16 PM, Lang Hames <lhames at gmail.com> wrote:
> Hi Richard,
> 
> I've added source ranges to the diagnostic, however I'm wary of catching cases like
> 
> if (&foo) {}
> 
> That seems too deliberate. For now I'd prefer to stick to the simple case of missing parentheses.
> 
> What do you think?
> 
> Cheers,
> Lang.
> 
> On Mon, Nov 28, 2011 at 3:12 PM, Richard Trieu <rtrieu at google.com> wrote:
> On Mon, Nov 28, 2011 at 1:38 PM, Lang Hames <lhames at gmail.com> wrote:
> This patch adds a warning for implicit conversion from functions to booleans.
> 
> Could someone take a look and let me know if anything needs fixing or improving?
> 
> Cheers,
> Lang. 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> 
> Can this be changed to catch cases like this:
> 
> void foo();
> if (&foo) {}
> 
> Also, have you thought about formatting the diagnostic to use the DiagnoseImpCast() helper functions like the other implicit cast warnings?  If you don't use it, it would be nice to add E->getSourceRange() to underline the function name.
> 
> 
> 
> 
> <func-as-bool-warning-3.patch>_______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111203/20e4c510/attachment.html>


More information about the cfe-commits mailing list