r313784 - Remove offset size check in nullptr arithmetic handling
Andrew Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 20 11:06:44 PDT 2017
Author: akaylor
Date: Wed Sep 20 11:06:44 2017
New Revision: 313784
URL: http://llvm.org/viewvc/llvm-project?rev=313784&view=rev
Log:
Remove offset size check in nullptr arithmetic handling
Differential Revision: https://reviews.llvm.org/D37042
Modified:
cfe/trunk/lib/AST/Expr.cpp
cfe/trunk/test/CodeGen/nullptr-arithmetic.c
cfe/trunk/test/Sema/pointer-addition.c
cfe/trunk/test/SemaCXX/nullptr-arithmetic.cpp
Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=313784&r1=313783&r2=313784&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Wed Sep 20 11:06:44 2017
@@ -1837,17 +1837,14 @@ bool BinaryOperator::isNullPointerArithm
// Check that we have one pointer and one integer operand.
Expr *PExp;
- Expr *IExp;
if (LHS->getType()->isPointerType()) {
if (!RHS->getType()->isIntegerType())
return false;
PExp = LHS;
- IExp = RHS;
} else if (RHS->getType()->isPointerType()) {
if (!LHS->getType()->isIntegerType())
return false;
PExp = RHS;
- IExp = LHS;
} else {
return false;
}
@@ -1862,10 +1859,6 @@ bool BinaryOperator::isNullPointerArithm
if (!PTy || !PTy->getPointeeType()->isCharType())
return false;
- // Check that the integer type is pointer-sized.
- if (Ctx.getTypeSize(IExp->getType()) != Ctx.getTypeSize(PExp->getType()))
- return false;
-
return true;
}
InitListExpr::InitListExpr(const ASTContext &C, SourceLocation lbraceloc,
Modified: cfe/trunk/test/CodeGen/nullptr-arithmetic.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/nullptr-arithmetic.c?rev=313784&r1=313783&r2=313784&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/nullptr-arithmetic.c (original)
+++ cfe/trunk/test/CodeGen/nullptr-arithmetic.c Wed Sep 20 11:06:44 2017
@@ -1,4 +1,6 @@
// RUN: %clang_cc1 -S %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -S %s -emit-llvm -triple i686-unknown-unknown -o - | FileCheck %s
+// RUN: %clang_cc1 -S %s -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s
#include <stdint.h>
@@ -32,3 +34,14 @@ int8_t* test3(intptr_t n) {
// CHECK-LABEL: test3
// CHECK: getelementptr
// CHECK-NOT: inttoptr
+
+// This checks the case where the offset isn't pointer-sized.
+// The front end will implicitly cast the offset to an integer, so we need to
+// make sure that doesn't cause problems on targets where integers and pointers
+// are not the same size.
+int8_t *test4(int8_t b) {
+ return NULLPTRI8 + b;
+}
+// CHECK-LABEL: test4
+// CHECK: inttoptr
+// CHECK-NOT: getelementptr
Modified: cfe/trunk/test/Sema/pointer-addition.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/pointer-addition.c?rev=313784&r1=313783&r2=313784&view=diff
==============================================================================
--- cfe/trunk/test/Sema/pointer-addition.c (original)
+++ cfe/trunk/test/Sema/pointer-addition.c Wed Sep 20 11:06:44 2017
@@ -1,4 +1,6 @@
// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic -Wextra -std=c11
+// RUN: %clang_cc1 %s -fsyntax-only -triple i686-unknown-unknown -verify -pedantic -Wextra -std=c11
+// RUN: %clang_cc1 %s -fsyntax-only -triple x86_64-unknown-unknown -verify -pedantic -Wextra -std=c11
#include <stdint.h>
Modified: cfe/trunk/test/SemaCXX/nullptr-arithmetic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/nullptr-arithmetic.cpp?rev=313784&r1=313783&r2=313784&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/nullptr-arithmetic.cpp (original)
+++ cfe/trunk/test/SemaCXX/nullptr-arithmetic.cpp Wed Sep 20 11:06:44 2017
@@ -1,4 +1,6 @@
// RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic -Wextra -std=c++11
+// RUN: %clang_cc1 %s -fsyntax-only -triple i686-unknown-unknown -verify -pedantic -Wextra -std=c++11
+// RUN: %clang_cc1 %s -fsyntax-only -triple x86_64-unknown-unknown -verify -pedantic -Wextra -std=c++11
#include <stdint.h>
More information about the cfe-commits
mailing list