From 9e05085ff65a2bee65a879a657878639a189c64e Mon Sep 17 00:00:00 2001 From: tecodev Date: Fri, 2 Mar 2007 21:52:21 +0000 Subject: [PATCH] * src/pic/gen.c (genGenPointerSet): removed bogus assertion git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4661 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 ++++ src/pic/gen.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 657b86d0..0f94c250 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-03-02 Raphael Neider + + * src/pic/gen.c (genGenPointerSet): removed bogus assertion + 2007-02-28 Frieder Ferlemann * device/lib/mcs51/crtxclear.asm: pdata segment of 256 byte would not diff --git a/src/pic/gen.c b/src/pic/gen.c index ad2ffec3..429e44a2 100644 --- a/src/pic/gen.c +++ b/src/pic/gen.c @@ -9641,7 +9641,16 @@ static void genGenPointerSet (operand *right, operand *result, iCode *ic) int size = AOP_SIZE(right); int idx = 0; - assert (size == getSize(OP_SYM_ETYPE(result))); + /* The following assertion fails for + * struct foo { char a; char b; } bar; + * void demo(struct foo *dst, char c) { dst->b = c; } + * as size will be 1 (sizeof(c)), whereas dst->b will be accessed + * using (((char *)dst)+1), whose OP_SYM_ETYPE still is struct foo + * of size 2. + * The frontend seems to guarantee that IC_LEFT has the correct size, + * it works fine both for larger and smaller types of `char c'. + * */ + //assert (size == getSize(OP_SYM_ETYPE(result))); assert (size > 0 && size <= 4); /* pass arguments */ -- 2.39.5