LHS.get(), RHS.get()))
return QualType();
- bool LHSIsNullPtr = LHS.get()->IgnoreParenCasts()->isNullPointerConstant(
- Context, Expr::NPC_ValueDependentIsNotNull);
- bool RHSIsNullPtr = RHS.get()->IgnoreParenCasts()->isNullPointerConstant(
- Context, Expr::NPC_ValueDependentIsNotNull);
-
- // Subtracting nullptr or from nullptr should produce
- // a warning expect nullptr - nullptr is valid in C++ [expr.add]p7
- if (LHSIsNullPtr && (!getLangOpts().CPlusPlus || !RHSIsNullPtr))
- diagnoseArithmeticOnNullPointer(*this, Loc, LHS.get(), false);
- if (RHSIsNullPtr && (!getLangOpts().CPlusPlus || !LHSIsNullPtr))
- diagnoseArithmeticOnNullPointer(*this, Loc, RHS.get(), false);
+ // FIXME: Add warnings for nullptr - ptr.
// The pointee type may have zero size. As an extension, a structure or
// union may have zero size or an array may have zero length. In this
// Cases that don't match the GNU inttoptr idiom get a different warning.
f = (char*)0 - i; // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
int *g = (int*)0 + i; // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
- f = (char*)((char*)0 - f); // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
- f = (char*)(f - (char*)0); // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
- f = (char*)((char*)0 - (char*)0); // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}} expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
}
+++ /dev/null
-// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic -Wextra -std=c++11
-
-void a() {
- char *f = (char*)0;
- f = (char*)((char*)0 - f); // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
- f = (char*)(f - (char*)0); // expected-warning {{performing pointer arithmetic on a null pointer has undefined behavior}}
- f = (char*)((char*)0 - (char*)0); // valid in C++
-}