Revert "Produce warning for performing pointer arithmetic on a null pointer."
authorNico Weber <thakis@chromium.org>
Wed, 12 May 2021 18:53:50 +0000 (14:53 -0400)
committerNico Weber <thakis@chromium.org>
Wed, 12 May 2021 18:53:50 +0000 (14:53 -0400)
This reverts commit dfc1e31d49fe1380c9bab43373995df5fed15e6d.
See discussion on https://reviews.llvm.org/D98798

clang/lib/Sema/SemaExpr.cpp
clang/test/Sema/pointer-addition.c
clang/test/Sema/pointer-addition.cpp [deleted file]

index 719161f..b8be673 100644 (file)
@@ -10779,17 +10779,7 @@ QualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS,
                                                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
index ab641bd..562f053 100644 (file)
@@ -29,7 +29,4 @@ void a(S* b, void* c) {
   // 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}}
 }
diff --git a/clang/test/Sema/pointer-addition.cpp b/clang/test/Sema/pointer-addition.cpp
deleted file mode 100644 (file)
index 5e09034..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// 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++
-}