https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79674

            Bug ID: 79674
           Summary: Missed optimisation when no sequence point present
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: etienne_lorrain at yahoo dot fr
  Target Milestone: ---

It may be controvertial use, but I would like to report it with low priority...

Having this code (tested on GCC7):
------>o--o<---------
static inline void parallel (int c_compliant, ...) {}
volatile struct { unsigned char r, g, b, t; } vol_str;

void fct1 (void)
{
  vol_str.r = 1,
  vol_str.g = 2,
  vol_str.b = 3,
  vol_str.t = 0;
}

void fct2 (void)
{
  parallel (vol_str.r = 1, vol_str.g = 2, vol_str.b = 3, vol_str.t = 0);
}
------>o--o<---------

fct1 has to be translated into four independant byte writes because since some
ANSI standard the comma (used like this) has become a sequence point.

but fct2 could be compiled into a single 32 bits write because there are no
sequence point when we use the comma to separate parameters in a function call
(hence the name of the function: parallel)...

Reply via email to