public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352
@ 2021-01-05 19:26 doko at debian dot org
  2021-01-05 20:02 ` [Bug c++/98545] " mpolacek at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: doko at debian dot org @ 2021-01-05 19:26 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 98545
           Summary: [11 Regression] ICE in write_expression, at
                    cp/mangle.c:3352
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: doko at debian dot org
  Target Milestone: ---

seen with trunk 20210102, building the sopt package

$ cat serial_vs_parallel_padmm.ii
class Matrix {
public:
  Matrix();
  template <typename OtherDerived> Matrix(OtherDerived);
};
template <class = double> using Vector = Matrix;
class L1TightFrame {
protected:
  template <class T0, class T1> void operator()(T0, double, T1);
};
class L1 : L1TightFrame {
public:
  template <class... T>
  auto tight_frame(T...) -> decltype(operator()(T()...)) {}
};
template <class> class ImagingProximalADMM {
public:
  template <class DERIVED> ImagingProximalADMM(DERIVED);
  L1 l1_proximal() const;
  int operator()() {
    int result, __trans_tmp_10;
    Vector<> out, __trans_tmp_12;
    operator()(out, __trans_tmp_10, __trans_tmp_12);
    return result;
  }
  int operator()(Vector<> &, Vector<> const &, Vector<> const &) const;
  template <class T0, class T1>
  void l1_proximal(T0 out, double gamma, T1 x) const {
    l1_proximal().tight_frame(out, gamma, x);
  }
};
template <class SCALAR>
int ImagingProximalADMM<SCALAR>::operator()(Vector<> &, Vector<> const &,
                                            Vector<> const &) const {
  int result;
  [&](Vector<> out, double gamma, Vector<> x) { l1_proximal(out, gamma, x); };
  return result;
}
Vector<> y = ImagingProximalADMM<double>(y)();

$ g++ -c -O0 -std=gnu++11 serial_vs_parallel_padmm.ii
serial_vs_parallel_padmm.ii: In instantiation of ‘decltype
(((L1*)this)->L1TightFrame::operator()(T()...)) L1::tight_frame(T ...) [with T
= {Matrix, double, Matrix}]’:
serial_vs_parallel_padmm.ii:14:8: internal compiler error: in write_expression,
at cp/mangle.c:3352
   14 |   auto tight_frame(T...) -> decltype(operator()(T()...)) {}
      |        ^~~~~~~~~~~
0x97242d write_expression
        ../../src/gcc/cp/mangle.c:3352
0x190cd14 write_expression
        ../../src/gcc/cp/mangle.c:3449
0x14b393f write_type
        ../../src/gcc/cp/mangle.c:2343
0x14bafb1 write_bare_function_type
        ../../src/gcc/cp/mangle.c:2746
0x12bdcb0 mangle_decl_string
        ../../src/gcc/cp/mangle.c:4001
0x12bcfcc get_mangled_id
        ../../src/gcc/cp/mangle.c:4022
0x12bcfcc mangle_decl(tree_node*)
        ../../src/gcc/cp/mangle.c:4060
0x12b4558 decl_assembler_name(tree_node*)
        ../../src/gcc/tree.c:708
0x12b4558 symtab_node::get_comdat_group_id()
        ../../src/gcc/cgraph.h:253
0x12b4558 analyze_functions
        ../../src/gcc/cgraphunit.c:1185
0x17f0543 symbol_table::finalize_compilation_unit()
        ../../src/gcc/cgraphunit.c:2513
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
@ 2021-01-05 20:02 ` mpolacek at gcc dot gnu.org
  2021-01-13 20:45 ` mpolacek at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-05 20:02 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-01-05
                 CC|                            |jason at gcc dot gnu.org,
                   |                            |mpolacek at gcc dot gnu.org
     Ever confirmed|0                           |1
           Priority|P3                          |P1
   Target Milestone|---                         |11.0
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Started with r11-6301.

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
  2021-01-05 20:02 ` [Bug c++/98545] " mpolacek at gcc dot gnu.org
@ 2021-01-13 20:45 ` mpolacek at gcc dot gnu.org
  2021-01-13 21:03 ` mpolacek at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-13 20:45 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Candidate fix:

--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3349,7 +3349,8 @@ write_expression (tree expr)
   else if (dependent_name (expr))
     {
       tree name = dependent_name (expr);
-      gcc_assert (!IDENTIFIER_ANY_OP_P (name));
+      if (IDENTIFIER_ANY_OP_P (name))
+   write_string ("on");
       write_unqualified_id (name);
     }
   else

but I need to figure out how to test this.

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
  2021-01-05 20:02 ` [Bug c++/98545] " mpolacek at gcc dot gnu.org
  2021-01-13 20:45 ` mpolacek at gcc dot gnu.org
@ 2021-01-13 21:03 ` mpolacek at gcc dot gnu.org
  2021-01-13 22:53 ` mpolacek at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-13 21:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
(In reply to Marek Polacek from comment #2)
> but I need to figure out how to test this.

[[gnu::used]] to actually emit the function.

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
                   ` (2 preceding siblings ...)
  2021-01-13 21:03 ` mpolacek at gcc dot gnu.org
@ 2021-01-13 22:53 ` mpolacek at gcc dot gnu.org
  2021-01-22 18:02 ` cvs-commit at gcc dot gnu.org
  2021-01-22 18:07 ` mpolacek at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-13 22:53 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |mpolacek at gcc dot gnu.org

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
                   ` (3 preceding siblings ...)
  2021-01-13 22:53 ` mpolacek at gcc dot gnu.org
@ 2021-01-22 18:02 ` cvs-commit at gcc dot gnu.org
  2021-01-22 18:07 ` mpolacek at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-01-22 18:02 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:25fc4d01a8ed1888e6a65597a3387349eb3c950c

commit r11-6864-g25fc4d01a8ed1888e6a65597a3387349eb3c950c
Author: Marek Polacek <polacek@redhat.com>
Date:   Wed Jan 13 16:33:39 2021 -0500

    c++: ICE when mangling operator name [PR98545]

    r11-6301 added some asserts in mangle.c, and now we trip over one of
    them.  In particular, it's the one asserting that we didn't get
    IDENTIFIER_ANY_OP_P when mangling an expression with a dependent name.

    As this testcase shows, it's possible to get that, so turn the assert
    into an if and write "on".  That changes the mangling in the following
    way:

    With this patch:

    $ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTonclspcvT__EEEDpS2_
    decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double,
a>(a, double, a)

    G++10:
    $ c++filt _ZN1i1hIJ1adS1_EEEDTcldtdefpTclspcvT__EEEDpS2_
    decltype (((*this).(operator()))((a)(), (double)(), (a)())) i::h<a, double,
a>(a, double, a)

    clang++/icc:
    $ c++filt _ZN1i1hIJ1adS1_EEEDTclonclspcvT__EEEDpS2_
    decltype ((operator())((a)(), (double)(), (a)())) i::h<a, double, a>(a,
double, a)

    This is now tracked in PR98756.

    gcc/cp/ChangeLog:

            PR c++/98545
            * mangle.c (write_member_name): Emit
abi_warn_or_compat_version_crosses
            warnings regardless of abi_version_at_least.
            (write_expression): When the expression is a dependent name
            and an operator name, write "on" before writing its name.

    gcc/ChangeLog:

            PR c++/98545
            * doc/invoke.texi: Update C++ ABI Version 15 description.

    gcc/testsuite/ChangeLog:

            PR c++/98545
            * g++.dg/abi/mangle76.C: New test.

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

* [Bug c++/98545] [11 Regression] ICE in write_expression, at cp/mangle.c:3352
  2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
                   ` (4 preceding siblings ...)
  2021-01-22 18:02 ` cvs-commit at gcc dot gnu.org
@ 2021-01-22 18:07 ` mpolacek at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2021-01-22 18:07 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Fixed.

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

end of thread, other threads:[~2021-01-22 18:07 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-05 19:26 [Bug c++/98545] New: [11 Regression] ICE in write_expression, at cp/mangle.c:3352 doko at debian dot org
2021-01-05 20:02 ` [Bug c++/98545] " mpolacek at gcc dot gnu.org
2021-01-13 20:45 ` mpolacek at gcc dot gnu.org
2021-01-13 21:03 ` mpolacek at gcc dot gnu.org
2021-01-13 22:53 ` mpolacek at gcc dot gnu.org
2021-01-22 18:02 ` cvs-commit at gcc dot gnu.org
2021-01-22 18:07 ` mpolacek at gcc dot gnu.org

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).