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

--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
Thanks.  I belatedly realized that the test case didn't reproduce the problem I
was seeing.  The one below demonstrates that the -O1 option does override the
-O2 set earlier.  Sorry for the noise!

$ cat pr100685.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout
pr100685.c
#pragma GCC optimize ("2")

int f (void)
{
  char s[] = "abc";
  return __builtin_strlen (s);   // folded to 3 (good)
}

#pragma GCC push_options
#pragma GCC optimize ("1")

int g (void)
{
  char s[] = "abc";
  return __builtin_strlen (s);   // not folded and shouldn't be
}

;; Function f (f, funcdef_no=0, decl_uid=1943, cgraph_uid=1, symbol_order=0)

__attribute__((optimize ("2")))
int f ()
{
  <bb 2> [local count: 1073741824]:
  return 3;

}



;; Function g (g, funcdef_no=1, decl_uid=1947, cgraph_uid=2, symbol_order=1)

__attribute__((optimize ("2", "1")))
int g ()
{
  char s[4];
  long unsigned int _1;
  int _4;

  <bb 2> [local count: 1073741824]:
  s = "abc";
  _1 = __builtin_strlen (&s);
  _4 = (int) _1;
  s ={v} {CLOBBER};
  return _4;

}

Reply via email to