can this have lived here for so many years?
* src/SDCCicode.c (ast2iCode): return left instead of right for assignment,
fixes bug 1273984, see also patch 1645121, thanks Günther Jehle
+ * support/regression/tests/bug1273984.c: new, added, thanks Günther Jehle
2007-02-06 Bernhard Held <bernhard AT bernhardheld.de>
--- /dev/null
+/* An assignment inside a functioncall changed the type of the parameter.\r
+ See bug description 1273984 for details.\r
+\r
+ Bug detected and fixed by Guenther Jehle\r
+\r
+ sign: unsigned,\r
+ */\r
+\r
+#include <testfwk.h>\r
+\r
+void foo({sign} int val) {\r
+ val; //make the compiler happy\r
+}\r
+\r
+void fooInt({sign} int val) {\r
+ ASSERT(val==3);\r
+}\r
+\r
+void fooChar({sign} char val) {\r
+ ASSERT(val==6);\r
+}\r
+\r
+void\r
+testAssignInFunctioncall(void)\r
+{\r
+ volatile {sign} char charVal=3;\r
+ volatile {sign} int intVal=0x4040;\r
+\r
+ fooInt(intVal=charVal); // should cast charVal to int for function call.\r
+ // without patch #1645121, a char is put on the stack\r
+ // (or hold in registers)\r
+ foo(0xAAAA);\r
+ fooInt(intVal=charVal);\r
+\r
+ intVal=6;\r
+\r
+ fooChar(charVal=intVal); // without patch, a int is put on the stack\r
+ foo(0xAAAA);\r
+ fooChar(charVal=intVal);\r
+\r
+}\r
+\r
+\r