public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "gavin at yzena dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug middle-end/108448] GCC Elides Assignment to Pointer and memcpy
Date: Thu, 19 Jan 2023 05:51:27 +0000	[thread overview]
Message-ID: <bug-108448-4-PPHX067SaR@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-108448-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #6 from Gavin Howard <gavin at yzena dot com> ---
Created attachment 54302
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54302&action=edit
An Amalgamation to Reproduce

I have managed to make an amalgamation that reproduces the bug. When you unzip
the attachment, you should get `amal.c`.

Run the following:

```
$ gcc -std=c11 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
-DYC_BUILTIN_128=1 -DYC_ENABLE_STACKTRACES=1 -O2 -g -o amal amal.c
$ ./amal amal.c temp.txt temp 1
```

You should get an assert failure as follows:

```
Assert Failed: pointer is NULL
    Expected:  (stack != ((void *)0))
    Source:    yc/src/concurrency/strucon.c:439
    Function:  y_strucon_handleErrorHelper()

Aborted
```

This file was produced from a source file with the `strgen` main, a function it
needed, and a bunch of `#include` of C files that were needed. The original was
`amalgamation.c`, and I ran the following command on it:

```
$ gcc -Iyc/include -std=c11 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700
-D_GNU_SOURCE -DYC_BUILTIN_128=1 -E amalgamation.c > amal.c
```

(It was created in the directory above the repo directory.)

This created the `amal.c` file that I have attached.

The line 63558 has the pointer assignment. The next line has the memcpy()
commented out. Either one is elided. You can comment out 63558 and uncomment
the next to test.

If you add ASan and UBSan, like so:

```
$ gcc -std=c11 -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700 -D_GNU_SOURCE
-DYC_BUILTIN_128=1 -DYC_ENABLE_STACKTRACES=1 -O2 -g -o amal amal.c
```

they report nothing. In fact, they then make the program work.

(The "Encountered end-of-file" is a bug in the original that didn't suppress
EOF as an error; just ignore it because it's not really an error.)

If you run Valgrind on the non-ASan/UBSan build, like so:

```
$ valgrind --error-exitcode=100 --leak-check=full --show-leak-kinds=all
--errors-for-leak-kinds=all --num-callers=500 --child-silent-after-fork=yes
./amal amal.c temp.txt temp 1
```

It also reports nothing until the abort.

  parent reply	other threads:[~2023-01-19  5:51 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-18 18:09 [Bug c/108448] New: " gavin at yzena dot com
2023-01-18 18:15 ` [Bug c/108448] " pinskia at gcc dot gnu.org
2023-01-18 18:16 ` [Bug middle-end/108448] " pinskia at gcc dot gnu.org
2023-01-18 18:22 ` gavin at yzena dot com
2023-01-18 18:29 ` pinskia at gcc dot gnu.org
2023-01-18 18:44 ` gavin at yzena dot com
2023-01-19  5:51 ` gavin at yzena dot com [this message]
2023-01-19  6:03 ` pinskia at gcc dot gnu.org
2023-01-19 15:29 ` gavin at yzena dot com
2023-01-19 15:36 ` gavin at yzena dot com
2023-01-23 22:33 ` gavin at yzena dot com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-108448-4-PPHX067SaR@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).