X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCsymt.c;h=f830136954bce1767e639ed8b77cac9d9f8f9db2;hb=2ee35049f829fc523bab32504f31cfdef6745757;hp=9db4cf03c2c64186e415998c4e6bb5a9c0cce988;hpb=fc4727437bf580144b7373bc377ad7734509929d;p=fw%2Fsdcc diff --git a/src/SDCCsymt.c b/src/SDCCsymt.c index 9db4cf03..f8301369 100644 --- a/src/SDCCsymt.c +++ b/src/SDCCsymt.c @@ -524,10 +524,32 @@ void checkTypeSanity(sym_link *etype, char *name) { /*------------------------------------------------------------------*/ /* mergeSpec - merges two specifiers and returns the new one */ /*------------------------------------------------------------------*/ +#define LAST_MINUTE_2_3_0_FIX sym_link * mergeSpec (sym_link * dest, sym_link * src, char *name) { +#ifdef LAST_MINUTE_2_3_0_FIX + sym_link *symlink; + + if (!IS_SPEC(dest)) { + // This should not happen + fprintf (stderr, "*** internal error: can't merge declarators\n"); + } + if (!IS_SPEC(src)) { + // here we have a declarator as source, reverse them + symlink=src; + src=dest; + dest=symlink; + while (!IS_SPEC(dest)) { + // and find the specifier + dest=dest->next; + } + } else { + symlink=dest; + } +#endif + if (getenv("DEBUG_mergeSpec")) { fprintf (stderr, "mergeSpec: \"%s\"\n", name); } @@ -592,7 +614,11 @@ mergeSpec (sym_link * dest, sym_link * src, char *name) if (IS_STRUCT (dest) && SPEC_STRUCT (dest) == NULL) SPEC_STRUCT (dest) = SPEC_STRUCT (src); +#ifdef LAST_MINUTE_2_3_0_FIX + return symlink; +#else return dest; +#endif } /*------------------------------------------------------------------*/