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

Eric Botcazou <ebotcazou at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ebotcazou at gcc dot gnu.org

--- Comment #10 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
I don't understand the new code in gimple_set_location:

static inline void
gimple_set_location (gimple *g, location_t location)
{
  /* Copy the no-warning data to the statement location.  */
  copy_warning (location, g->location);
  g->location = location;
}

Typically g->location is UNKNOWN_LOCATION since the GIMPLE statement was just
built so this does:

  copy_warning (location, UNKNOWN_LOCATION);

and finally invokes nowarn_map->remove (location)?

I can fix my particular problem by adding the obvious guard:

static inline void
gimple_set_location (gimple *g, location_t location)
{
  /* Copy the no-warning data to the statement location.  */
  if (g->location != UNKNOWN_LOCATION)
    copy_warning (location, g->location);
  g->location = location;
}

but shouldn't the code query warning-control.cc instead to see if the
no-warning bit is set on g?

Reply via email to