public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/112350] New: gcc is not triggering a dangling reference indicating stack use after return
@ 2023-11-02 15:02 mohamed.selim at dxc dot com
  2023-11-02 15:24 ` [Bug c++/112350] " pinskia at gcc dot gnu.org
  2023-11-06 11:33 ` [Bug c++/112350] gcc is not triggering a dangling reference indicating stack use after return with -fsanitize=address and optimization mohamed.selim at dxc dot com
  0 siblings, 2 replies; 3+ messages in thread
From: mohamed.selim at dxc dot com @ 2023-11-02 15:02 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 112350
           Summary: gcc is not triggering a dangling reference indicating
                    stack use after return
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mohamed.selim at dxc dot com
  Target Milestone: ---

Scenario A:
gcc is not triggering a dangling reference indicating stack use after return,
the address-sanitizer does trigger though.

"==1==ERROR: AddressSanitizer: stack-use-after-return on"

Scenario B:
gcc triggers a warning "-Wreturn-local-addr"

The sanitizers intervenes in both scenarios as expected, while gcc warnings in
not triggered in scenario A. Looks like the reference_wrapper has something to
do with it.


compiler options used:
-std=c++14 -Wframe-address -Wreturn-local-addr -Wall -Wextra -Wpedantic
-fsanitize=address


#include <iostream>
#include <utility>


// scenario A
const int& foo()
{
    int x = 234;
    std::reference_wrapper<int> s{x};

    return s.get();
}

// scenario B
const int& foo()
{
    int s = 234;   
    return s;
}

int main()
{
    const auto& f_res = foo();
    std::cout << "result: " << f_res << "\n";

    return 0;
}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug c++/112350] gcc is not triggering a dangling reference indicating stack use after return
  2023-11-02 15:02 [Bug c++/112350] New: gcc is not triggering a dangling reference indicating stack use after return mohamed.selim at dxc dot com
@ 2023-11-02 15:24 ` pinskia at gcc dot gnu.org
  2023-11-06 11:33 ` [Bug c++/112350] gcc is not triggering a dangling reference indicating stack use after return with -fsanitize=address and optimization mohamed.selim at dxc dot com
  1 sibling, 0 replies; 3+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-11-02 15:24 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
With optimization enabled and without -fsanitize=address  we get:

<source>: In function 'const int& foo1()':
<source>:12:18: warning: using a dangling pointer to 'x' [-Wdangling-pointer=]
   12 |     return s.get();
      |                  ^
<source>:9:9: note: 'x' declared here
    9 |     int x = 234;
      |         ^

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Bug c++/112350] gcc is not triggering a dangling reference indicating stack use after return with -fsanitize=address and optimization
  2023-11-02 15:02 [Bug c++/112350] New: gcc is not triggering a dangling reference indicating stack use after return mohamed.selim at dxc dot com
  2023-11-02 15:24 ` [Bug c++/112350] " pinskia at gcc dot gnu.org
@ 2023-11-06 11:33 ` mohamed.selim at dxc dot com
  1 sibling, 0 replies; 3+ messages in thread
From: mohamed.selim at dxc dot com @ 2023-11-06 11:33 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Mohamed <mohamed.selim at dxc dot com> ---
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112350&GoAheadAndLogIn=1

it's shown here that the warning is triggered by setting -O3 optimization level
to 3. 
I don't know if such behavior is expected i.e. triggering warning is coupled
with optimization level!!!

So the above link to compiler explorer example shows only the diagnostic error
from the sanitizer, if -O3 is added the warning is triggered.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-11-06 11:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-02 15:02 [Bug c++/112350] New: gcc is not triggering a dangling reference indicating stack use after return mohamed.selim at dxc dot com
2023-11-02 15:24 ` [Bug c++/112350] " pinskia at gcc dot gnu.org
2023-11-06 11:33 ` [Bug c++/112350] gcc is not triggering a dangling reference indicating stack use after return with -fsanitize=address and optimization mohamed.selim at dxc dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).