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

--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Also, the other PR is about a function being made const late when it previously
wasn't, while in this case it is being made non-const after it has been const
before.
  /* Drop pure/const flags from instrumented functions.  */
  if (profile_arc_flag || flag_test_coverage)
    FOR_EACH_DEFINED_FUNCTION (node)
      {
        if (!gimple_has_body_p (node->decl)
            || !(!node->clone_of
            || node->decl != node->clone_of->decl))
          continue;

        /* Don't profile functions produced for builtin stuff.  */
        if (DECL_SOURCE_LOCATION (node->decl) == BUILTINS_LOCATION)
          continue;

        node->set_const_flag (false, false);
        node->set_pure_flag (false, false);
      }
just looks completely wrong to me for const, which unlike pure attribute can be
on both function types and on function declarations.  If we want calls to const
functions to actually not be treated as const when profiling, it can be only
done by ignoring const everywhere if profile_arc_flag || flag_test_coverage. 
It even can't be just ignored for direct calls to defined functions, because
calls can be indirect at first, without vops, and then fndecl propagated and
turned into direct.  Or for IPA they can be defined in other TUs.

Reply via email to