libgccjit: Fix UB in constructor functions #124

Open
antoyo wants to merge 1 commit from antoyo/gcc:fix/gccjit-cast-ub into trunk
Member
gcc/jit/ChangeLog:
	PR jit/105296
	* jit-recording.cc: Use dyn_cast_compound_type instead of
	reinterpret_cast.
	* jit-recording.h (dyn_cast_compound_type, is_union): New methods.
	* libgccjit.cc: Use correct cast method instead of
	reinterpret_cast.

gcc/testsuite/ChangeLog:
	PR jit/105296
	* jit.dg/all-non-failing-tests.h: Mention new test.
	* jit.dg/test-aligned-constructor.c: New test.

CC: David Malcolm dmalcolm@redhat.com, jit@gcc.gnu.org

``` gcc/jit/ChangeLog: PR jit/105296 * jit-recording.cc: Use dyn_cast_compound_type instead of reinterpret_cast. * jit-recording.h (dyn_cast_compound_type, is_union): New methods. * libgccjit.cc: Use correct cast method instead of reinterpret_cast. gcc/testsuite/ChangeLog: PR jit/105296 * jit.dg/all-non-failing-tests.h: Mention new test. * jit.dg/test-aligned-constructor.c: New test. ``` CC: David Malcolm <dmalcolm@redhat.com>, <jit@gcc.gnu.org>
libgccjit: Fix UB in constructor functions
Some checks failed
/ testjob (pull_request) Failing after 48s
992085c6ae
gcc/jit/ChangeLog:
	PR jit/105296
	* jit-recording.cc: Use dyn_cast_compound_type instead of
	reinterpret_cast.
	* jit-recording.h (dyn_cast_compound_type, is_union): New methods.
	* libgccjit.cc: Use correct cast method instead of
	reinterpret_cast.

gcc/testsuite/ChangeLog:
	PR jit/105296
	* jit.dg/all-non-failing-tests.h: Mention new test.
	* jit.dg/test-aligned-constructor.c: New test.
Member

Welcome to Sourceware Forge

Hi @antoyo, and thanks for your PR. This bot helps you send your patch series to the mailing list.

Please follow these guidelines to ensure a smooth submission.

Writing a Good PR Description

  • If your PR has multiple commits, write a meaningful description. It becomes the cover letter.
  • For a single commit, you can leave the description empty if the commit message is clear.

To CC reviewers, add at the end of your PR description one or more lines like this:

CC: Revi Ewer <revi.ewer@example.com>, Ill Takalook <ill.takalook@example.net>

Avoid copy-pasting a CC list from a previous PR. Doing so may cause failure to send the emails properly.

We recommend reviewing your commit messages carefully before submitting.

This project expects a specific format.
See Submitting Patches for details

Submitting Your Patch

To submit, you must be authorized. Ask any permitted contributor to authorize you by commenting: /allow. This is anyone who has been /allowed before.

Once allowed, comment: /submit

Use /preview to see the emails before sending. (Requires a public forge email.)

Responding to Reviews

Watch for replies on the mailing list. If not subscribed, you can reply by:

  1. Visiting inbox.sourceware.org
  2. Clicking (raw) on the email
  3. Importing it into your mail client

For Gmail:

curl -g --user "<Email>:<Password>" \
  --url "imaps://imap.gmail.com/INBOX" -T /path/to/raw.txt

Updating Your PR

  1. Push new commits, rebase and force push changes to the same branch as needed
  2. Update the PR description with a “Changes since vX” section
  3. Comment again with: /submit

Need help?

Consider joining the gcc and gcc-patches mailing lists..
For real time communication, check the gcc irc channels.

Or join #overseers on Libera Chat, particularly if this automation is not working (stay online to get replies, IRC does not save messages if people are not online).

<!-- pr-welcome --> # Welcome to Sourceware Forge Hi @antoyo, and thanks for your PR. This bot helps you send your patch series to the mailing list. Please follow these guidelines to ensure a smooth submission. ## Writing a Good PR Description - If your PR has **multiple commits**, write a meaningful description. It becomes the cover letter. - For **a single commit**, you can leave the description empty if the commit message is clear. To CC reviewers, add at the end of your PR description one or more lines like this: ```text CC: Revi Ewer <revi.ewer@example.com>, Ill Takalook <ill.takalook@example.net> ``` Avoid copy-pasting a CC list from a previous PR. Doing so may cause failure to send the emails properly. We recommend reviewing your commit messages carefully before submitting. This project expects a specific format. See [Submitting Patches](https://gcc.gnu.org/contribute.html#patches) for details ## Submitting Your Patch To submit, you must be authorized. Ask any permitted contributor to authorize you by commenting: `/allow`. This is anyone who has been `/allow`ed before. Once allowed, comment: `/submit` Use `/preview` to see the emails before sending. (Requires a public forge email.) ## Responding to Reviews Watch for replies on the mailing list. If not subscribed, you can reply by: 1. Visiting [inbox.sourceware.org](https://inbox.sourceware.org) 2. Clicking `(raw)` on the email 3. Importing it into your mail client For Gmail: ```sh curl -g --user "<Email>:<Password>" \ --url "imaps://imap.gmail.com/INBOX" -T /path/to/raw.txt ``` ## Updating Your PR 1. Push new commits, rebase and force push changes to the same branch as needed 2. Update the PR description with a “Changes since vX” section 3. Comment again with: `/submit` ## Need help? Consider joining the [gcc and gcc-patches mailing lists.](https://gcc.gnu.org/lists.html). For real time communication, check the [gcc irc channels](https://gcc.gnu.org/wiki/GCConIRC). Or join [`#overseers`](https://web.libera.chat/#overseers) on Libera Chat, particularly if this automation is not working (stay online to get replies, IRC does not save messages if people are not online).
Author
Member

I checked all the other usages of reinterpret_cast in libgccjit and they seem safe.
Could someone please double-check that?

I checked all the other usages of `reinterpret_cast` in `libgccjit` and they seem safe. Could someone please double-check that?
@ -0,0 +67,4 @@
one,
};
struct_value =
gcc_jit_context_new_struct_constructor (ctxt, NULL, aligned_struct_type,
Author
Member

This doesn't seem to trigger the bug in this test on my computer, unfortunately.
The issue is that since it's UB, n_el can get any value and it's often greater than the number of values provided by this function since the latter is very small.
I'm not sure if there would be a better way to test this.

This doesn't seem to trigger the bug in this test on my computer, unfortunately. The issue is that since it's UB, `n_el` can get any value and it's often greater than the number of values provided by this function since the latter is very small. I'm not sure if there would be a better way to test this.
Author
Member

/submit

/submit
Member

Version 1 of this pull request has been stored. It includes the following commits:

  • libgccjit: Fix UB in constructor functions - 992085c6ae
<!-- pr-new-version --> Version 1 of this pull request has been stored. It includes the following commits: - libgccjit: Fix UB in constructor functions - 992085c6aefcff49b39e6ae30f0ad79fd17166e8
Member

Pull Request versions:

# Base Head
1 7a5a92a643 992085c6ae (diff)

In order to compare , clone this repository and run

PR=124
git fetch origin "refs/versioned_pull/${PR}/*:refs/versioned_pull/${PR}/*"
PRV1=1
PRV2=2
git range-diff "refs/versioned_pull/${PR}/${PRV1}/base..refs/versioned_pull/${PR}/${PRV1}/head"  "refs/versioned_pull/${PR}/${PRV2}/base..refs/versioned_pull/${PR}/${PRV2}/head"
<!-- pr-versions --> Pull Request versions: | # | Base | Head | | | - | ---- | ---- | - | | 1 | 7a5a92a643b883f3ad3c959045f2cd2d1552c1a6 | 992085c6aefcff49b39e6ae30f0ad79fd17166e8 | [(diff)](https://forge.sourceware.org/gcc/gcc-TEST.git/compare/7a5a92a643b883f3ad3c959045f2cd2d1552c1a6...992085c6aefcff49b39e6ae30f0ad79fd17166e8) | In order to compare , clone this repository and run ``` PR=124 git fetch origin "refs/versioned_pull/${PR}/*:refs/versioned_pull/${PR}/*" PRV1=1 PRV2=2 git range-diff "refs/versioned_pull/${PR}/${PRV1}/base..refs/versioned_pull/${PR}/${PRV1}/head" "refs/versioned_pull/${PR}/${PRV2}/base..refs/versioned_pull/${PR}/${PRV2}/head" ```
Member

Sent patch series version 1 containing 1 patches to gcc-patches mailing list gcc-patches@gcc.gnu.org and cc'd David Malcolm dmalcolm@redhat.com, jit@gcc.gnu.org.
Cover letter

Sent patch series version 1 containing 1 patches to gcc-patches mailing list <gcc-patches@gcc.gnu.org> and cc'd David Malcolm <dmalcolm@redhat.com>, <jit@gcc.gnu.org>. [Cover letter](https://inbox.sourceware.org/test-list/176313874557.940.12594815508268139404.batrachomyomachia.gcc.gcc-TEST.124.1.0@forge-stage.sourceware.org)
First-time contributor
<!-- linaro-ci-status CI bot https://ci.linaro.org/job/tcwg_gnu_cross_build--master-arm-precommit/141/ --> CI state: success :white_check_mark: CI bot https://ci.linaro.org/job/tcwg_gnu_cross_build--master-arm-precommit/141/ : CI bot tcwg_gnu_cross_build--master-arm: Build results See: https://ci.linaro.org/job/tcwg_gnu_cross_build--master-arm-precommit/141/artifact/artifacts/artifacts.precommit/notify/mail-body.txt
First-time contributor
<!-- linaro-ci-status CI bot https://ci.linaro.org/job/tcwg_gnu_cross_build--master-aarch64-precommit/120/ --> CI state: success :white_check_mark: CI bot https://ci.linaro.org/job/tcwg_gnu_cross_build--master-aarch64-precommit/120/ : CI bot tcwg_gnu_cross_build--master-aarch64: Build results See: https://ci.linaro.org/job/tcwg_gnu_cross_build--master-aarch64-precommit/120/artifact/artifacts/artifacts.precommit/notify/mail-body.txt
First-time contributor

CI state: success
CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/ : CI bot tcwg_gnu_cross_check_gcc--master-arm: Test results
See: https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/notify/mail-body.txt

Dear contributor,

Our automatic CI successfully passed with your patch(es). Please find some details below.

In  master-arm, after:
  | gcc patch https://forge.sourceware.org/gcc/gcc-TEST/pulls/124
  | Author: Antoni Boucher <bouanto@zoho.com>
  | Date:   Fri Nov 14 11:19:53 2025 -0500
  | 
  |     [PATCH] libgccjit: Fix UB in constructor functions
  |     
  |     gcc/jit/ChangeLog:
  |             PR jit/105296
  |             * jit-recording.cc: Use dyn_cast_compound_type instead of
  | ... 9 lines of the commit log omitted.
  | ... applied on top of baseline commit:
  | 4711901000a c++/modules: Keep tracking instantiations of static class variable templates [PR122625]


Used configuration :
 *CI config* tcwg_gnu_cross_check_gcc master-arm
 *configure and test flags:* --target arm-linux-gnueabihf 

If you have any questions regarding this report, please ask on linaro-toolchain@lists.linaro.org mailing list.

-----------------8<--------------------------8<--------------------------8<--------------------------

The information below contains the details of the failures, and the ways to reproduce a debug environment:

You can find the failure logs in *.log.1.xz files in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/00-sumfiles/
The full lists of regressions and improvements as well as configure and make commands are in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/notify/
The list of [ignored] baseline and flaky failures are in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/sumfiles/xfails.xfail

Current build   : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts
Reference build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-build/2428/artifact/artifacts

Warning: we do not enable maintainer-mode nor automatically update
generated files, which may lead to failures if the patch modifies the
master files.

<!-- linaro-ci-status CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/ --> CI state: success :white_check_mark: CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/ : CI bot tcwg_gnu_cross_check_gcc--master-arm: Test results See: https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/notify/mail-body.txt ``` Dear contributor, Our automatic CI successfully passed with your patch(es). Please find some details below. In master-arm, after: | gcc patch https://forge.sourceware.org/gcc/gcc-TEST/pulls/124 | Author: Antoni Boucher <bouanto@zoho.com> | Date: Fri Nov 14 11:19:53 2025 -0500 | | [PATCH] libgccjit: Fix UB in constructor functions | | gcc/jit/ChangeLog: | PR jit/105296 | * jit-recording.cc: Use dyn_cast_compound_type instead of | ... 9 lines of the commit log omitted. | ... applied on top of baseline commit: | 4711901000a c++/modules: Keep tracking instantiations of static class variable templates [PR122625] Used configuration : *CI config* tcwg_gnu_cross_check_gcc master-arm *configure and test flags:* --target arm-linux-gnueabihf If you have any questions regarding this report, please ask on linaro-toolchain@lists.linaro.org mailing list. -----------------8<--------------------------8<--------------------------8<-------------------------- The information below contains the details of the failures, and the ways to reproduce a debug environment: You can find the failure logs in *.log.1.xz files in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/00-sumfiles/ The full lists of regressions and improvements as well as configure and make commands are in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/notify/ The list of [ignored] baseline and flaky failures are in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts/artifacts.precommit/sumfiles/xfails.xfail Current build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-precommit/134/artifact/artifacts Reference build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-arm-build/2428/artifact/artifacts Warning: we do not enable maintainer-mode nor automatically update generated files, which may lead to failures if the patch modifies the master files. ```
First-time contributor

CI state: success
CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/ : CI bot tcwg_gnu_cross_check_gcc--master-aarch64: Test results
See: https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/notify/mail-body.txt

Dear contributor,

Our automatic CI successfully passed with your patch(es). Please find some details below.

In  master-aarch64, after:
  | gcc patch https://forge.sourceware.org/gcc/gcc-TEST/pulls/124
  | Author: Antoni Boucher <bouanto@zoho.com>
  | Date:   Fri Nov 14 11:19:53 2025 -0500
  | 
  |     [PATCH] libgccjit: Fix UB in constructor functions
  |     
  |     gcc/jit/ChangeLog:
  |             PR jit/105296
  |             * jit-recording.cc: Use dyn_cast_compound_type instead of
  | ... 9 lines of the commit log omitted.
  | ... applied on top of baseline commit:
  | beba09b5c5a Allow single PHI initial values.


Used configuration :
 *CI config* tcwg_gnu_cross_check_gcc master-aarch64
 *configure and test flags:* --target aarch64-linux-gnu 

If you have any questions regarding this report, please ask on linaro-toolchain@lists.linaro.org mailing list.

-----------------8<--------------------------8<--------------------------8<--------------------------

The information below contains the details of the failures, and the ways to reproduce a debug environment:

You can find the failure logs in *.log.1.xz files in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/00-sumfiles/
The full lists of regressions and improvements as well as configure and make commands are in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/notify/
The list of [ignored] baseline and flaky failures are in
 * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/sumfiles/xfails.xfail

Current build   : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts
Reference build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-build/2425/artifact/artifacts

Warning: we do not enable maintainer-mode nor automatically update
generated files, which may lead to failures if the patch modifies the
master files.

<!-- linaro-ci-status CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/ --> CI state: success :white_check_mark: CI bot https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/ : CI bot tcwg_gnu_cross_check_gcc--master-aarch64: Test results See: https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/notify/mail-body.txt ``` Dear contributor, Our automatic CI successfully passed with your patch(es). Please find some details below. In master-aarch64, after: | gcc patch https://forge.sourceware.org/gcc/gcc-TEST/pulls/124 | Author: Antoni Boucher <bouanto@zoho.com> | Date: Fri Nov 14 11:19:53 2025 -0500 | | [PATCH] libgccjit: Fix UB in constructor functions | | gcc/jit/ChangeLog: | PR jit/105296 | * jit-recording.cc: Use dyn_cast_compound_type instead of | ... 9 lines of the commit log omitted. | ... applied on top of baseline commit: | beba09b5c5a Allow single PHI initial values. Used configuration : *CI config* tcwg_gnu_cross_check_gcc master-aarch64 *configure and test flags:* --target aarch64-linux-gnu If you have any questions regarding this report, please ask on linaro-toolchain@lists.linaro.org mailing list. -----------------8<--------------------------8<--------------------------8<-------------------------- The information below contains the details of the failures, and the ways to reproduce a debug environment: You can find the failure logs in *.log.1.xz files in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/00-sumfiles/ The full lists of regressions and improvements as well as configure and make commands are in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/notify/ The list of [ignored] baseline and flaky failures are in * https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts/artifacts.precommit/sumfiles/xfails.xfail Current build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-precommit/86/artifact/artifacts Reference build : https://ci.linaro.org/job/tcwg_gnu_cross_check_gcc--master-aarch64-build/2425/artifact/artifacts Warning: we do not enable maintainer-mode nor automatically update generated files, which may lead to failures if the patch modifies the master files. ```
Some checks failed
/ testjob (pull_request) Failing after 48s
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u fix/gccjit-cast-ub:antoyo-fix/gccjit-cast-ub
git switch antoyo-fix/gccjit-cast-ub

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch trunk
git merge --no-ff antoyo-fix/gccjit-cast-ub
git switch antoyo-fix/gccjit-cast-ub
git rebase trunk
git switch trunk
git merge --ff-only antoyo-fix/gccjit-cast-ub
git switch antoyo-fix/gccjit-cast-ub
git rebase trunk
git switch trunk
git merge --no-ff antoyo-fix/gccjit-cast-ub
git switch trunk
git merge --squash antoyo-fix/gccjit-cast-ub
git switch trunk
git merge --ff-only antoyo-fix/gccjit-cast-ub
git switch trunk
git merge antoyo-fix/gccjit-cast-ub
git push origin trunk
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gcc/gcc-TEST!124
No description provided.