From: Zhongxing Xu Date: Tue, 10 Nov 2009 07:52:53 +0000 (+0000) Subject: SizeofPointerChecker: Many false positives have the form 'sizeof *p'. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=37e9c47b6a6650b81c9796d2e46eb3ad6a0e16a0;p=clang SizeofPointerChecker: Many false positives have the form 'sizeof *p'. This is reasonable because people know what they are doing when they intentionally dereference the pointer. So now we only emit warning when a pointer variable is use literally. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86673 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/CheckSizeofPointer.cpp b/lib/Analysis/CheckSizeofPointer.cpp index 827c512b75..1aab3c973d 100644 --- a/lib/Analysis/CheckSizeofPointer.cpp +++ b/lib/Analysis/CheckSizeofPointer.cpp @@ -49,7 +49,15 @@ void WalkAST::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { QualType T = E->getTypeOfArgument(); if (T->isPointerType()) { - SourceRange R = E->getArgumentExpr()->getSourceRange(); + + // Many false positives have the form 'sizeof *p'. This is reasonable + // because people know what they are doing when they intentionally + // dereference the pointer. + Expr *ArgEx = E->getArgumentExpr(); + if (!isa(ArgEx)) + return; + + SourceRange R = ArgEx->getSourceRange(); BR.EmitBasicReport("Potential unintended use of sizeof() on pointer type", "Logic", "The code calls sizeof() on a pointer type. "