[Bug c/83223] New: -fconserve-stack outlined code isn't dropped if it's logically unreachable

george.burgess.iv at gmail dot com gcc-bugzilla@gcc.gnu.org
Thu Nov 30 01:18:00 GMT 2017


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

            Bug ID: 83223
           Summary: -fconserve-stack outlined code isn't dropped if it's
                    logically unreachable
           Product: gcc
           Version: 7.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: george.burgess.iv at gmail dot com
  Target Milestone: ---

GCC version: Reproed on godbolt's GCC trunk, 7.2, and 4.9.

Test case (godbolt link, if you'd prefer: https://godbolt.org/g/zxhjPV):

$ echo 'struct data { char foo[64]; };

void complain() __attribute__((warning("oh no!")));
void panic(const char *) __attribute__((noreturn, cold));
void *foo_real(void *, const void *);

void bar(struct data *ptr) {
  char tmp[sizeof(ptr->foo)];
  if (__builtin_object_size(ptr->foo, 0) >= sizeof(ptr->foo)) {
    foo_real(ptr->foo, tmp);
  } else {
    complain();
    panic("");
  }
}

__auto_type v = bar;' | gcc -x c -fconserve-stack -O2 - -o /dev/null -c

<stdin>: In function ‘bar.part.0’:
<stdin>:12:5: warning: call to ‘complain’ declared with attribute warning: oh
no!

It looks like the outlined part sticks around if `bar`'s address is taken.
Normally, this isn't a problem. However, it can cause false-positives in code
that uses the warning or error attributes (as shown above).


More information about the Gcc-bugs mailing list