From: SourceForge.net <no...@so...> - 2003-07-31 07:06:04
|
Bugs item #780691, was opened at 2003-07-31 00:06 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=780691&group_id=599 Category: C-Front End Group: None Status: Open Resolution: None Priority: 5 Submitted By: Scott Bronson (bronson) Assigned to: Nobody/Anonymous (nobody) Summary: variable definition and extern declaration not ensured equal Initial Comment: It appears that the compiler does not ensure that an extern declaration for a variable matches its definition. This very easily leads to incorrect code generation. Here are some examples. All of the following compile without error even though they contain grave errors. #1 const, with typedef: a is declared mutable, but defined const typedef struct { unsigned char a; } A; extern A a; const A a = { 1 }; #2 const, no typedef: b is declared mutable, but defined const struct B { unsigned char a; }; extern struct B b; const struct B b = { 1 }; void main() {} #3 array size: extern unsigned char c[12]; unsigned char c[4] = { 1, 2, 3, 4}; Thankfully, the compiler DOES check for signed vs. unsigned and char vs. int. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=780691&group_id=599 |
From: SourceForge.net <no...@so...> - 2003-11-12 09:02:08
|
Bugs item #780691, was opened at 2003-07-31 02:06 Message generated for change (Comment added) made by epetrich You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=780691&group_id=599 Category: C-Front End >Group: fixed >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Scott Bronson (bronson) >Assigned to: Erik Petrich (epetrich) Summary: variable definition and extern declaration not ensured equal Initial Comment: It appears that the compiler does not ensure that an extern declaration for a variable matches its definition. This very easily leads to incorrect code generation. Here are some examples. All of the following compile without error even though they contain grave errors. #1 const, with typedef: a is declared mutable, but defined const typedef struct { unsigned char a; } A; extern A a; const A a = { 1 }; #2 const, no typedef: b is declared mutable, but defined const struct B { unsigned char a; }; extern struct B b; const struct B b = { 1 }; void main() {} #3 array size: extern unsigned char c[12]; unsigned char c[4] = { 1, 2, 3, 4}; Thankfully, the compiler DOES check for signed vs. unsigned and char vs. int. ---------------------------------------------------------------------- >Comment By: Erik Petrich (epetrich) Date: 2003-11-12 03:01 Message: Logged In: YES user_id=635249 Fixed with src/SDCCsymt.h 1.68 and src/SDCCsymt.c 1.167 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=780691&group_id=599 |