[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-bugs
Subject:    [Bug c++/110508] New: ICE (Segfault) during widening_mul, in match_uaddc_usubc
From:       "ali.mpfard at gmail dot com via Gcc-bugs" <gcc-bugs () gcc ! gnu ! org>
Date:       2023-06-30 21:48:12
Message-ID: bug-110508-4 () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]

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

            Bug ID: 110508
           Summary: ICE (Segfault) during widening_mul, in
                    match_uaddc_usubc
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ali.mpfard at gmail dot com
  Target Milestone: ---

Created attachment 55437
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55437&action=edit
Original preprocessed source

GCC trunk (commit db38b285ba61c5b888adc0d117177bfd774c1153, not bisected)
segfaults when compiling the reduced source below (also attached: full
preprocessed source), also related to #79173
<https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79173>. 

// Target: x86_64-pc-linux-gnu
// Configured with: ./configure --prefix=/opt/gcc --disable-nls
--disable-libstdcxx-pch --enable-shared --enable-languages=c,c++
--enable-default-pie --enable-lto --enable-threads=posix
// Thread model: posix
// Supported LTO compression algorithms: zlib zstd
// gcc version 14.0.0 20230630 (experimental) (GCC)
//
// secp.cpp: In instantiation of 'static void
Detail::StorageOperations::add(auto:1) [with int <anonymous> = 0; auto:1 =
int]':
// secp.cpp:23:34:   required from 'void Detail::UFixedBigInt::addc(T, bool)
[with T = Detail::UFixedBigInt]'
// secp.cpp:31:12:   required from here
// secp.cpp:9:11: error: reference 'carry' is initialized with itself
[-Werror=init-self]
//     9 |     bool &carry = carry;
//       |           ^~~~~
// secp.cpp:11:9: error: unused variable 'outputoutput'
[-Werror=unused-variable]
//    11 |         outputoutput =
//       |         ^~~~~~~~~~~~
// secp.cpp: In static member function 'static void
Detail::StorageOperations::add(auto:1) [with int <anonymous> = 0; auto:1 =
int]':
// secp.cpp:9:11: error: 'carry' is used uninitialized [-Werror=uninitialized]
//     9 |     bool &carry = carry;
//       |           ^~~~~
// secp.cpp:9:11: note: 'carry' was declared here
//     9 |     bool &carry = carry;
//       |           ^~~~~
// during GIMPLE pass: widening_mul
// secp.cpp: In function 'void modular_multiply()':
// secp.cpp:29:6: internal compiler error: Segmentation fault
//    29 | void modular_multiply() {
//       |      ^~~~~~~~~~~~~~~~
// 0x149fb7f crash_signal
//      ../.././gcc/toplev.cc:314
// 0xe80858 gimple_bb(gimple const*)
//      ../.././gcc/gimple.h:1905
// 0x114529c gsi_for_stmt(gimple*)
//      ../.././gcc/gimple-iterator.cc:617
// 0x1640ff7 match_uaddc_usubc
//      ../.././gcc/tree-ssa-math-opts.cc:4864
// 0x164b6ce after_dom_children
//      ../.././gcc/tree-ssa-math-opts.cc:5589
// 0x217dbba dom_walker::walk(basic_block_def*)
//      ../.././gcc/domwalk.cc:354
// 0x163c836 execute
//      ../.././gcc/tree-ssa-math-opts.cc:5666
// Please submit a full bug report, with preprocessed source.
// Please include the complete backtrace with any bug report.
// See <https://gcc.gnu.org/bugs/> for instructions.

// /opt/gcc/libexec/gcc/x86_64-pc-linux-gnu/14.0.0/cc1plus -quiet -D_GNU_SOURCE
secp.cpp -quiet -dumpdir a- -dumpbase secp.cpp -dumpbase-ext .cpp
-mtune=generic -march=x86-64 -g1 -O2 -Wall -Wextra -Wno-unknown-warning-option
-Wno-unused-command-line-argument -Werror -Wno-expansion-to-defined
-Wno-literal-suffix -Wno-dangling-reference -Wno-maybe-uninitialized
-Wno-shorten-64-to-32 -Wvla -std=c++20 -fno-exceptions -fsigned-char
-fno-semantic-interposition -fPIC -freport-bug -o - -frandom-seed=0
-fdump-noaddr

# 0 "secp.cpp"
# 1 "/home/test/Workspace/serenity/reduce//"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "secp.cpp"
template <typename, typename> constexpr bool IsSame = false;
namespace Detail {
typedef long NativeWord;
struct IntegerWrapper;
long add_words_word1;
long add_words_word2;
struct StorageOperations {
  template <int> static void add(auto) {
    bool &carry = carry;
    NativeWord ncarry,
        outputoutput =
            __builtin_addcl(add_words_word1, add_words_word2, carry,
                            reinterpret_cast<unsigned long *>(&ncarry));
    carry = ncarry;
  }
};
template <typename T>
concept UFixedInt = !
IsSame<T, IntegerWrapper>;
int m_data;
struct UFixedBigInt {
  template <UFixedInt T> void addc(T, bool) {
    StorageOperations::add<false>(m_data);
  }
};
}
using Detail::UFixedBigInt;
bool modular_multiply_carry;
void modular_multiply() {
  UFixedBigInt mult, mp;
  mult.addc(mp, modular_multiply_carry);
}=
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic