PR14284: crash on ext-valid returning NULL from a void function
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 8 Nov 2012 00:41:20 +0000 (00:41 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 8 Nov 2012 00:41:20 +0000 (00:41 +0000)
llvm-svn: 167565

clang/lib/Sema/SemaChecking.cpp
clang/test/SemaCXX/null_in_arithmetic_ops.cpp

index a434425..692a210 100644 (file)
@@ -4799,7 +4799,8 @@ void CheckImplicitConversion(Sema &S, Expr *E, QualType T,
 
   if ((E->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)
            == Expr::NPCK_GNUNull) && !Target->isAnyPointerType()
-      && !Target->isBlockPointerType() && !Target->isMemberPointerType()) {
+      && !Target->isBlockPointerType() && !Target->isMemberPointerType()
+      && Target->isScalarType()) {
     SourceLocation Loc = E->getSourceRange().getBegin();
     if (Loc.isMacroID())
       Loc = S.SourceMgr.getImmediateExpansionRange(Loc).first;
index a6c0dbf..a919213 100644 (file)
@@ -90,4 +90,6 @@ void f() {
   b = e == NULL || NULL == e || e != NULL || NULL != e;
   b = f == NULL || NULL == f || f != NULL || NULL != f;
   b = "f" == NULL || NULL == "f" || "f" != NULL || NULL != "f";
+
+  return NULL; // expected-error{{void function 'f' should not return a value}}
 }