[Sema] Add more strict check for sizeof diagnostics for bzero
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 11 Aug 2016 18:33:15 +0000 (18:33 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Thu, 11 Aug 2016 18:33:15 +0000 (18:33 +0000)
Follow-up from r278264 after Joerg's feedback.

Since bzero is not standard, be more strict: also check if the first
argument is a pointer, which harden the check for when it does not come
originally from a builtin.

llvm-svn: 278379

clang/lib/Sema/SemaChecking.cpp

index f76ab08..c1781c2 100644 (file)
@@ -6199,6 +6199,13 @@ void Sema::CheckMemaccessArguments(const CallExpr *Call,
   const Expr *SizeOfArg = getSizeOfExprArg(LenExpr);
   llvm::FoldingSetNodeID SizeOfArgID;
 
+  // Although widely used, 'bzero' is not a standard function. Be more strict
+  // with the argument types before allowing diagnostics and only allow the
+  // form bzero(ptr, sizeof(...)).
+  QualType FirstArgTy = Call->getArg(0)->IgnoreParenImpCasts()->getType();
+  if (BId == Builtin::BIbzero && !FirstArgTy->getAs<PointerType>())
+    return;
+
   for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {
     const Expr *Dest = Call->getArg(ArgIdx)->IgnoreParenImpCasts();
     SourceRange ArgRange = Call->getArg(ArgIdx)->getSourceRange();