]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/fortran/trans-types.c
Perforate fnspec strings
[thirdparty/gcc.git] / gcc / fortran / trans-types.c
index 26fdb2803a723fad5ef44a24052f5db408d4fcd5..17f3ccc1d4e9bf1d3ebb4e3a8cb1e8cee035653d 100644 (file)
@@ -2940,20 +2940,33 @@ create_fn_spec (gfc_symbol *sym, tree fntype)
 
   memset (&spec, 0, sizeof (spec));
   spec[0] = '.';
-  spec_len = 1;
+  spec[1] = ' ';
+  spec_len = 2;
 
   if (sym->attr.entry_master)
-    spec[spec_len++] = 'R';
+    {
+      spec[spec_len++] = 'R';
+      spec[spec_len++] = ' ';
+    }
   if (gfc_return_by_reference (sym))
     {
       gfc_symbol *result = sym->result ? sym->result : sym;
 
       if (result->attr.pointer || sym->attr.proc_pointer)
-       spec[spec_len++] = '.';
+       {
+         spec[spec_len++] = '.';
+         spec[spec_len++] = ' ';
+       }
       else
-       spec[spec_len++] = 'w';
+       {
+         spec[spec_len++] = 'w';
+         spec[spec_len++] = ' ';
+       }
       if (sym->ts.type == BT_CHARACTER)
-       spec[spec_len++] = 'R';
+       {
+         spec[spec_len++] = 'R';
+         spec[spec_len++] = ' ';
+       }
     }
 
   for (f = gfc_sym_get_dummy_args (sym); f; f = f->next)
@@ -2968,11 +2981,20 @@ create_fn_spec (gfc_symbol *sym, tree fntype)
                && (CLASS_DATA (f->sym)->ts.u.derived->attr.proc_pointer_comp
                    || CLASS_DATA (f->sym)->ts.u.derived->attr.pointer_comp))
            || (f->sym->ts.type == BT_INTEGER && f->sym->ts.is_c_interop))
-         spec[spec_len++] = '.';
+         {
+           spec[spec_len++] = '.';
+           spec[spec_len++] = ' ';
+         }
        else if (f->sym->attr.intent == INTENT_IN)
-         spec[spec_len++] = 'r';
+         {
+           spec[spec_len++] = 'r';
+           spec[spec_len++] = ' ';
+         }
        else if (f->sym)
-         spec[spec_len++] = 'w';
+         {
+           spec[spec_len++] = 'w';
+           spec[spec_len++] = ' ';
+         }
       }
 
   tmp = build_tree_list (NULL_TREE, build_string (spec_len, spec));