Index: lib/AST/Expr.cpp =================================================================== --- lib/AST/Expr.cpp +++ lib/AST/Expr.cpp @@ -1862,10 +1862,6 @@ 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, Index: test/CodeGen/nullptr-arithmetic.c =================================================================== --- test/CodeGen/nullptr-arithmetic.c +++ test/CodeGen/nullptr-arithmetic.c @@ -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 @@ -32,3 +34,14 @@ // 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 Index: test/Sema/pointer-addition.c =================================================================== --- test/Sema/pointer-addition.c +++ test/Sema/pointer-addition.c @@ -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 Index: test/SemaCXX/nullptr-arithmetic.cpp =================================================================== --- test/SemaCXX/nullptr-arithmetic.cpp +++ test/SemaCXX/nullptr-arithmetic.cpp @@ -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