http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60435

            Bug ID: 60435
           Summary: GCC failes to apply CSE for va_arg with different
                    types whose representations match
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bugdal at aerifal dot cx

Consider code of the following form:

long foo;
switch (cmd) {
case CMD1:
case CMD2:
case CMD3:
/* ... */
case CMD99:
    foo = va_arg(ap, int);
    break;
default:
    foo = va_arg(ap, long);
    break;
}

On machines where int and long have the same representation (even if just in
calling convention, not in memory), this whole switch should be eliminated. GCC
fails to do so, possibly resulting in large amounts of useless branch code.

Reply via email to