public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
@ 2014-07-22 15:39 burnus at gcc dot gnu.org
  2014-07-22 18:09 ` [Bug fortran/61881] " dominiq at lps dot ens.fr
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-07-22 15:39 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 61881
           Summary: ICE in gfc_conv_intrinsic_to_class with assumed-rank
                    CLASS(*)
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: pault at gcc dot gnu.org

The following code uses assumed-rank and CLASS(*) and ICEs. Such a code might
get used for GCC's OpenACC implementation.


foo.f90:3:0: internal compiler error: in fold_convert_loc, at fold-const.c:2074
 call test(4)
 ^
0x87556c fold_convert_loc(unsigned int, tree_node*, tree_node*)
        ../../gcc/fold-const.c:2074
0x69f570 gfc_conv_intrinsic_to_class(gfc_se*, gfc_expr*, gfc_typespec)
        ../../gcc/fortran/trans-expr.c:592



program test
  implicit none
  call test(4)
  call test([4])
contains
  subroutine test(a)
    class(*), dimension(..) :: a
  end subroutine test
end


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
@ 2014-07-22 18:09 ` dominiq at lps dot ens.fr
  2014-07-23  6:26 ` burnus at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: dominiq at lps dot ens.fr @ 2014-07-22 18:09 UTC (permalink / raw)
  To: gcc-bugs

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

Dominique d'Humieres <dominiq at lps dot ens.fr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-07-22
     Ever confirmed|0                           |1

--- Comment #1 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
After deletion the line

program test

I get the ICE which at the same place as the tests in pr49802 comments 5 and 8.


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
  2014-07-22 18:09 ` [Bug fortran/61881] " dominiq at lps dot ens.fr
@ 2014-07-23  6:26 ` burnus at gcc dot gnu.org
  2014-07-23  6:40 ` burnus at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-07-23  6:26 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Draft patch:

--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -591,4 +591,10 @@ gfc_conv_intrinsic_to_class (gfc_se *parmse, gfc_expr *e,
       gfc_conv_expr_reference (parmse, e);
-      tmp = fold_convert (TREE_TYPE (ctree), parmse->expr);
-      gfc_add_modify (&parmse->pre, ctree, tmp);
+      if (class_ts.u.derived->components->as && e->rank == 0)
+        tmp = gfc_conv_scalar_to_descriptor (parmse, parmse->expr,
+                         gfc_expr_attr (e));
+      else
+        {
+          tmp = fold_convert (TREE_TYPE (ctree), parmse->expr);
+          gfc_add_modify (&parmse->pre, ctree, tmp);
+        }
     }
@@ -599,3 +605,10 @@ gfc_conv_intrinsic_to_class (gfc_se *parmse, gfc_expr *e,
       gfc_conv_expr_descriptor (parmse, e);
-      gfc_add_modify (&parmse->pre, ctree, parmse->expr);
+      if (class_ts.u.derived->components->as->rank != e->rank)
+        {
+          tmp = fold_build1_loc (input_location, VIEW_CONVERT_EXPR,
+                     TREE_TYPE (ctree), parmse->expr);
+          gfc_add_expr_to_block (&parmse->pre, tmp);
+        }
+      else
+        gfc_add_modify (&parmse->pre, ctree, parmse->expr);
     }


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
  2014-07-22 18:09 ` [Bug fortran/61881] " dominiq at lps dot ens.fr
  2014-07-23  6:26 ` burnus at gcc dot gnu.org
@ 2014-07-23  6:40 ` burnus at gcc dot gnu.org
  2014-07-26 17:57 ` burnus at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-07-23  6:40 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
The draft patch does not fully work:

a) "class._data = desc" assignment is missing
  tmp = gfc_build_addr_expr (NULL_TREE, tmp);
plus the moved gfc_add_modify works in the scalar case; for the array case, one
additionally needs a prior gfc_conv_class_to_class call.

b) It mishandles  class(*) :: foo[*]  dummy arguments for which wrongly an
array descriptor is passed, one needs an additional
  && class_ts.u.derived->components->as->type == AS_ASSUMED_RANK


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2014-07-23  6:40 ` burnus at gcc dot gnu.org
@ 2014-07-26 17:57 ` burnus at gcc dot gnu.org
  2014-07-26 18:00 ` burnus at gcc dot gnu.org
  2014-09-03  6:42 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-07-26 17:57 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Author: burnus
Date: Sat Jul 26 17:56:39 2014
New Revision: 213085

URL: https://gcc.gnu.org/viewcvs?rev=213085&root=gcc&view=rev
Log:
Follow up to r213079.

2014-07-26  Tobias Burnus  <burnus@net-b.de>

        PR fortran/61881
        PR fortran/61888
        PR fortran/57305
        * intrinsic.texi (SIZEOF): Document changed behavior
        for polymorphic arrays.


Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/intrinsic.texi
    trunk/gcc/testsuite/ChangeLog


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2014-07-26 17:57 ` burnus at gcc dot gnu.org
@ 2014-07-26 18:00 ` burnus at gcc dot gnu.org
  2014-09-03  6:42 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-07-26 18:00 UTC (permalink / raw)
  To: gcc-bugs

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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

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

--- Comment #5 from Tobias Burnus <burnus at gcc dot gnu.org> ---
FIXED on the GCC 5 trunk (via r213079).


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

* [Bug fortran/61881] ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*)
  2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2014-07-26 18:00 ` burnus at gcc dot gnu.org
@ 2014-09-03  6:42 ` burnus at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: burnus at gcc dot gnu.org @ 2014-09-03  6:42 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Author: burnus
Date: Wed Sep  3 06:41:37 2014
New Revision: 214843

URL: https://gcc.gnu.org/viewcvs?rev=214843&root=gcc&view=rev
Log:
Missed that file in r213079 of 2014-07-26

2014-09-03  Tobias Burnus  <burnus@net-b.de>

        PR fortran/61881
        PR fortran/61888
        PR fortran/57305
        * gfortran.dg/sizeof_4.f90: New.


Added:
    trunk/gcc/testsuite/gfortran.dg/sizeof_4.f90
Modified:
    trunk/gcc/testsuite/ChangeLog


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

end of thread, other threads:[~2014-09-03  6:42 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-22 15:39 [Bug fortran/61881] New: ICE in gfc_conv_intrinsic_to_class with assumed-rank CLASS(*) burnus at gcc dot gnu.org
2014-07-22 18:09 ` [Bug fortran/61881] " dominiq at lps dot ens.fr
2014-07-23  6:26 ` burnus at gcc dot gnu.org
2014-07-23  6:40 ` burnus at gcc dot gnu.org
2014-07-26 17:57 ` burnus at gcc dot gnu.org
2014-07-26 18:00 ` burnus at gcc dot gnu.org
2014-09-03  6:42 ` burnus 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).