From 67ed241504134df14b300e4ccd6e16a896977e71 Mon Sep 17 00:00:00 2001 From: epetrich Date: Thu, 18 Dec 2003 21:23:36 +0000 Subject: [PATCH] * src/SDCCast.c (createIvalCharPtr), * src/SDCCglue.c (printChar): fixed bug #862241 (an error in my fix for bug #753752) * support/regression/tests/nullstring.c: tests for these two bugs git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3062 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 7 +++++ src/SDCCast.c | 9 ++++++ src/SDCCglue.c | 5 ++++ support/regression/tests/nullstring.c | 42 +++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 support/regression/tests/nullstring.c diff --git a/ChangeLog b/ChangeLog index 38806fd2..a6e261eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2003-12-18 Erik Petrich + + * src/SDCCast.c (createIvalCharPtr), + * src/SDCCglue.c (printChar): fixed bug #862241 (an error in my fix for + bug #753752) + * support/regression/tests/nullstring.c: tests for these two bugs + 2003-12-18 Erik Petrich * support/Util/SDCCerr.h, diff --git a/src/SDCCast.c b/src/SDCCast.c index 45c971d1..098cedba 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -994,6 +994,15 @@ createIvalCharPtr (ast * sym, sym_link * type, ast * iexpr) char *s = SPEC_CVAL (iexpr->etype).v_char; int i = 0; int size = getSize (iexpr->ftype); + int symsize = getSize (type); + + if (size>symsize) + { + if (size>(symsize+1)) + werrorfl (iexpr->filename, iexpr->lineno, W_EXCESS_INITIALIZERS, + "string", sym->opval.val->sym->name); + size = symsize; + } for (i=0;i + +#if defined(PORT_HOST) || defined(SDCC_z80) || defined(SDCC_gbz80) +# define data +# define xdata +# define code +#endif + +{storage} char string1[] = ""; +{storage} char string2[] = "a\0b\0c"; +{storage} char string3[5] = "a\0b\0c"; + +void +testStringArray(void) +{ + /* Make sure the strings are the correct size */ + /* and have the terminating null character */ + ASSERT(sizeof(string1)==1); + ASSERT(sizeof(string2)==6); + ASSERT(sizeof(string3)==5); + ASSERT(string1[0]==0); + ASSERT(string2[5]==0); + + ASSERT(string2[0]=='a'); + ASSERT(string2[2]=='b'); + ASSERT(string2[4]=='c'); + +} + +void +testStringConst(void) +{ + char * constStr1 = ""; + char * constStr2 = "a\0b\0c"; + + ASSERT (constStr1[0]==0); + ASSERT (constStr2[5]==0); +} -- 2.39.5