]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add a check for invalid use of BOZ with a derived type.
authorSteve Kargl <kargl@gcc.gnu.org>
Sun, 18 Dec 2022 03:15:43 +0000 (19:15 -0800)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 18 Dec 2022 03:36:59 +0000 (19:36 -0800)
PR fortran/107397

gcc/fortran/ChangeLog:

* decl.cc (add_init_expr_to_sym): Add check with new error message.

gcc/testsuite/ChangeLog:

* gfortran.dg/pr107397.f90: New test.

gcc/fortran/decl.cc
gcc/testsuite/gfortran.dg/pr107397.f90 [new file with mode: 0644]

index 0f9b2ced4c2d4278f6aa39e9a396ac7fa54a7ab3..1562dc22bc6e20d51d56c13d03c1b4aea1049e9b 100644 (file)
@@ -2221,6 +2221,14 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus)
            sym->ts.f90_type = init->ts.f90_type;
        }
 
+      /* Catch the case:  type(t), parameter :: x = z'1'.  */
+      if (sym->ts.type == BT_DERIVED && init->ts.type == BT_BOZ)
+       {
+         gfc_error ("Entity %qs at %L is incompatible with a BOZ "
+                    "literal constant", name, &sym->declared_at);
+         return false;
+       }
+
       /* Add initializer.  Make sure we keep the ranks sane.  */
       if (sym->attr.dimension && init->rank == 0)
        {
diff --git a/gcc/testsuite/gfortran.dg/pr107397.f90 b/gcc/testsuite/gfortran.dg/pr107397.f90
new file mode 100644 (file)
index 0000000..4592a27
--- /dev/null
@@ -0,0 +1,9 @@
+!{ dg-do compile }
+!
+program p
+  type t
+    real :: a = 1.0
+  end type
+  type(t), parameter :: x = z'1' ! { dg-error "incompatible with BOZ" }
+  x%a = x%a + 2 ! { dg-error "has no IMPLICIT type"}
+end