[Bug fortran/116370] New: UBSAN issue in fortran/trans-expr.cc in arrayfunc_assign_needs_temporary - enum value out of range
jamborm at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Aug 14 10:05:39 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116370
Bug ID: 116370
Summary: UBSAN issue in fortran/trans-expr.cc in
arrayfunc_assign_needs_temporary - enum value out of
range
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: jamborm at gcc dot gnu.org
CC: pault at gcc dot gnu.org
Blocks: 63426
Target Milestone: ---
Host: x86_64-linux
Target: x86_64-linux
With a compiler built with UBSAN instrumentation, compiling testcase
gfortran.dg/class_transformational_1.f90 fails with error:
/home/worker/buildworker/tiber-gcc-ubsan/build/gcc/fortran/trans-expr.cc:11157:33:
runtime error: load of value 1818451807, which is not a valid value for type
'expr_t'
This can be reproduced without UBSAN by just adding an assert like he following
to function arrayfunc_assign_needs_temporary that the loaded enum value is in
range and then running the test:
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -11153,6 +11153,8 @@ arrayfunc_assign_needs_temporary (gfc_expr * expr1,
gfc_expr * expr2)
character lengths are the same. */
if (expr2->ts.type == BT_CHARACTER && expr2->rank > 0)
{
+ gcc_assert (expr1->ts.u.cl->length == NULL
+ || (((unsigned) expr1->ts.u.cl->length->expr_type) <=
(unsigned) EXPR_PPC));
if (expr1->ts.u.cl->length == NULL
|| expr1->ts.u.cl->length->expr_type != EXPR_CONSTANT)
return true;
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63426
[Bug 63426] [meta-bug] Issues found with -fsanitize=undefined
More information about the Gcc-bugs
mailing list