From: Eli Friedman Date: Sat, 7 Jun 2008 17:27:51 +0000 (+0000) Subject: Fix crash with conversion to an address-space-qualified pointer. Bug X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c53296eb6d97f37fc1326f3ab38c3c811390b838;p=clang Fix crash with conversion to an address-space-qualified pointer. Bug reported on cfe-dev by Cédric Venet. Note that I seriously doubt that this perticular construct is useful, though: it's a pointer in an alternate address space pointing into unqualified address space. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52076 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index f5977728af..cae1f4bb24 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -632,7 +632,7 @@ public: // Handle pointer conversions next: pointers can only be converted to/from // other pointers and integers. - if (isa(DstType)) { + if (isa(DstTy)) { // The source value may be an integer, or a pointer. if (isa(Src->getType())) return llvm::ConstantExpr::getBitCast(Src, DstTy); @@ -640,7 +640,7 @@ public: return llvm::ConstantExpr::getIntToPtr(Src, DstTy); } - if (isa(SrcType)) { + if (isa(Src->getType())) { // Must be an ptr to int cast. assert(isa(DstTy) && "not ptr->int?"); return llvm::ConstantExpr::getPtrToInt(Src, DstTy); diff --git a/test/CodeGen/address-space-cast.c b/test/CodeGen/address-space-cast.c new file mode 100644 index 0000000000..473c8e0e81 --- /dev/null +++ b/test/CodeGen/address-space-cast.c @@ -0,0 +1,4 @@ +// RUN: clang -emit-llvm < %s + +volatile unsigned char* const __attribute__((address_space(1))) serial_ctrl = 0x02; +