From 3e47be5c90b2bf04369239ba618336c96e299a4c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 30 Nov 2007 18:02:19 +0000 Subject: [PATCH] fix a bug handling typedefs in member expr codegen. Patch by Seo Sanghyeon git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44455 91177308-0d34-0410-b5e6-96231b3b80d8 --- CodeGen/CGExpr.cpp | 5 +++-- test/CodeGen/typedef.c | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/CodeGen/typedef.c diff --git a/CodeGen/CGExpr.cpp b/CodeGen/CGExpr.cpp index 8fcc94805a..a4aa6db7ba 100644 --- a/CodeGen/CGExpr.cpp +++ b/CodeGen/CGExpr.cpp @@ -393,10 +393,11 @@ LValue CodeGenFunction::EmitMemberExpr(const MemberExpr *E) { BaseValue = BaseLV.getAddress(); if (E->isArrow()) { - QualType PTy = cast(BaseExpr->getType())->getPointeeType(); + QualType Ty = BaseExpr->getType(); + Ty = cast(Ty.getCanonicalType())->getPointeeType(); BaseValue = Builder.CreateBitCast(BaseValue, - llvm::PointerType::get(ConvertType(PTy)), "tmp"); + llvm::PointerType::get(ConvertType(Ty)), "tmp"); } } else BaseValue = EmitScalarExpr(BaseExpr); diff --git a/test/CodeGen/typedef.c b/test/CodeGen/typedef.c new file mode 100644 index 0000000000..291f0c89db --- /dev/null +++ b/test/CodeGen/typedef.c @@ -0,0 +1,8 @@ +// RUN: clang -emit-llvm %s + +typedef struct { int i; } Value; +typedef Value *PValue; + +int get_value(PValue v) { + return v->i; +} -- 2.40.0