re PR fortran/48291 ([OOP] internal compiler error, new_symbol(): Symbol name too...
authorJanus Weil <janus@gcc.gnu.org>
Sat, 26 Mar 2011 18:39:14 +0000 (19:39 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Sat, 26 Mar 2011 18:39:14 +0000 (19:39 +0100)
2011-03-26  Janus Weil  <janus@gcc.gnu.org>

PR fortran/48291
* class.c (get_unique_hashed_string): Adjust maximum allowable length
for unique type string.

2011-03-26  Janus Weil  <janus@gcc.gnu.org>

PR fortran/48291
* gfortran.dg/class_42.f03: New.

From-SVN: r171559

gcc/fortran/ChangeLog
gcc/fortran/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_42.f03 [new file with mode: 0644]

index f18a01da5465611b7ccf8c92ff062c363c29c401..8f44a09327598ee0eeb0bd6c4c08376341858e7c 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-26  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/48291
+       * class.c (get_unique_hashed_string): Adjust maximum allowable length
+       for unique type string.
+
 2011-03-25  Kai Tietz  <ktietz@redhat.com>
 
        * scanner.c (preprocessor_line): Use filename_cmp
index 85da3cb2b452d72f652f1e8ac7001f2464320fe2..b99930ab63304791df2c6f9a88d1794a5e034af7 100644 (file)
@@ -137,9 +137,9 @@ get_unique_hashed_string (char *string, gfc_symbol *derived)
 {
   char tmp[2*GFC_MAX_SYMBOL_LEN+2];
   get_unique_type_string (&tmp[0], derived);
-  /* If string is too long, use hash value in hex representation
-     (allow for extra decoration, cf. gfc_build_class_symbol)*/
-  if (strlen (tmp) > GFC_MAX_SYMBOL_LEN - 10)
+  /* If string is too long, use hash value in hex representation (allow for
+     extra decoration, cf. gfc_build_class_symbol & gfc_find_derived_vtab).  */
+  if (strlen (tmp) > GFC_MAX_SYMBOL_LEN - 11)
     {
       int h = gfc_hash_value (derived);
       sprintf (string, "%X", h);
index 6f2cd2a8961c21370436ba547411d654693361aa..7b6dfa3285a3856061280bfac166824e94d49823 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-26  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/48291
+       * gfortran.dg/class_42.f03: New.
+
 2011-03-26  Ira Rosen  <ira.rosen@linaro.org>
 
        * gcc.dg/vect/vect-cselim-1.c: Fail on targets that don't support
diff --git a/gcc/testsuite/gfortran.dg/class_42.f03 b/gcc/testsuite/gfortran.dg/class_42.f03
new file mode 100644 (file)
index 0000000..dd59835
--- /dev/null
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR 48291: [4.6/4.7 Regression] [OOP] internal compiler error, new_symbol(): Symbol name too long
+!
+! Contributed by Adrian Prantl <adrian@llnl.gov>
+
+module Overload_AnException_Impl
+  type :: Overload_AnException_impl_t
+  end type
+contains
+  subroutine ctor_impl(self)
+    class(Overload_AnException_impl_t) :: self
+  end subroutine
+end module 
+
+! { dg-final { cleanup-modules "Overload_AnException_Impl" } }