From: Seo Sanghyeon Date: Mon, 3 Dec 2007 06:23:43 +0000 (+0000) Subject: Ignore typedefs in pointer arithmetic codegen. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec86b97c34b4da5f66b2522d296a6d1c94f742e4;p=clang Ignore typedefs in pointer arithmetic codegen. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44529 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/CodeGen/CGExprScalar.cpp b/CodeGen/CGExprScalar.cpp index ab61aac599..7639d82f6b 100644 --- a/CodeGen/CGExprScalar.cpp +++ b/CodeGen/CGExprScalar.cpp @@ -697,11 +697,11 @@ Value *ScalarExprEmitter::VisitBinSub(const BinaryOperator *E) { Value *LHS = Visit(E->getLHS()); Value *RHS = Visit(E->getRHS()); - const PointerType *LHSPtrType = E->getLHS()->getType()->getAsPointerType(); - assert(LHSPtrType == E->getRHS()->getType()->getAsPointerType() && - "Can't subtract different pointer types"); + const QualType LHSType = E->getLHS()->getType().getCanonicalType(); + const QualType RHSType = E->getRHS()->getType().getCanonicalType(); + assert(LHSType == RHSType && "Can't subtract different pointer types"); - QualType LHSElementType = LHSPtrType->getPointeeType(); + QualType LHSElementType = cast(LHSType)->getPointeeType(); uint64_t ElementSize = CGF.getContext().getTypeSize(LHSElementType, SourceLocation()) / 8; diff --git a/test/CodeGen/pointer-arithmetic.c b/test/CodeGen/pointer-arithmetic.c new file mode 100644 index 0000000000..6c644c6e06 --- /dev/null +++ b/test/CodeGen/pointer-arithmetic.c @@ -0,0 +1,5 @@ +// RUN: clang -emit-llvm %s + +typedef int Int; + +int test1(int *a, Int *b) { return a - b; }