summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-11-13 01:24:28 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-11-13 01:24:28 +0000
commit7309f60b9e9084f442150337acd112148ae212d9 (patch)
tree1eb289a905e3ffc60034298677e65df8b86871f9 /clang/lib/Sema
parent3314f56ca84f393cd8dac40175d2e6c28d10405f (diff)
downloadbcm5719-llvm-7309f60b9e9084f442150337acd112148ae212d9.tar.gz
bcm5719-llvm-7309f60b9e9084f442150337acd112148ae212d9.zip
PR10837: Warn if a null pointer constant is formed by a zero integer constant
expression that is not a zero literal, in C. Patch by Ivan A. Kosarev! llvm-svn: 194540
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaExpr.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index 3c6b3b046de..7cd56705093 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -10614,8 +10614,17 @@ bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy,
switch (ConvTy) {
case Compatible:
- DiagnoseAssignmentEnum(DstType, SrcType, SrcExpr);
- return false;
+ // See if a proper null pointer constant is to be assigned.
+ if (DstType->isAnyPointerType() && !SrcType->isAnyPointerType() &&
+ SrcExpr->isNullPointerConstant(Context,
+ Expr::NPC_NeverValueDependent) ==
+ Expr::NPCK_ZeroExpression &&
+ !isUnevaluatedContext())
+ Diag(SrcExpr->getExprLoc(), diag::warn_non_literal_null_pointer)
+ << DstType << SrcExpr->getSourceRange();
+
+ DiagnoseAssignmentEnum(DstType, SrcType, SrcExpr);
+ return false;
case PointerToInt:
DiagKind = diag::ext_typecheck_convert_pointer_int;
OpenPOWER on IntegriCloud