public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Tobias Burnus <burnus@net-b.de>
To: "Tobias Schlüter" <tobias.schlueter@physik.uni-muenchen.de>
Cc: Janus Weil <janus@gcc.gnu.org>,
	 Dominique Dhumieres <dominiq@lps.ens.fr>,
	fortran <fortran@gcc.gnu.org>,
	gcc-patches <gcc-patches@gcc.gnu.org>,
	 tkoenig <tkoenig@netcologne.de>
Subject: Re: [Patch, Fortran, OOP] PR 46313: OOP-ABI issue, ALLOCATE issue, CLASS renaming issue
Date: Sun, 07 Nov 2010 13:19:00 -0000	[thread overview]
Message-ID: <4CD6A751.6090807@net-b.de> (raw)
In-Reply-To: <4CD6977B.6010002@physik.uni-muenchen.de>

Tobias Schlüter wrote:
> On 2010-11-07 13:04, Janus Weil wrote:
>>>> Yes, that is expected, because the patch changes the name of the vtab
>>>> to "vtab$main$dt", so one needs to change the name of the subroutine
>>>> in the test case in the same way in order to see the failure:
>
> Sorry I'm late, but gcc has the macro ASM_FORMAT_PRIVATE_NAME which does
> the work of making a name collision-free. If you use it you can make the
> rest of the name as readable as you want.

I think that it won't work. One needs the same assembler name for in 
each translation unit as there is one, common, global vtable per base 
type. My understanding is that ASM_FORMAT_PRIVATE_NAME would generate 
several disjunct assembler names...

>> The best option I can currently see is to use leading underscores (as
>> in "_vtab_main_dt"). This is forbidden in Fortran (cf. F08:R303), but
>> accepted by the assembler (cf.
>> http://sourceware.org/binutils/docs-2.20/as/Symbol-Names.html#Symbol-Names).
>>
>> Attached is a patch which does this change. I also added a few macros
>> in gfortran.h. Ok for trunk after successful regtest?

+static void
+get_unique_type_string (char *string, gfc_symbol *derived)
+{
+  if (derived->module)
+    sprintf (string, "%s_%s", derived->module, derived->name);
+  else
+    sprintf (string, "%s_%s", derived->ns->proc_name->name, derived->name);
+}

I wonder whether that works for cases like:

* module name == procedure name
* internal procedures == procedure name / module name.
* Nested submodules (when implemented)

I assume defining the same-named (and disjunct) DT in a module and 
separately in a subroutine is weird; with internal procedures and 
submodules it will start to get crazy. But shouldn't one do something 
like _proc_<procedure_name> for procedures? A {module/procedure 
name}_internal-proc-name?

Alternatively, one can defer it until a real-world bug report comes 
(which I think is very unlikely).

(And, at some point, the name becomes too long and one could think of 
using a hash name as in GCC's C++ compiler.)

Tobias

  reply	other threads:[~2010-11-07 13:19 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-06 23:34 Dominique Dhumieres
2010-11-06 23:56 ` Janus Weil
2010-11-07  7:55   ` Tobias Burnus
2010-11-07 12:04     ` Janus Weil
2010-11-07 12:11       ` Tobias Schlüter
2010-11-07 13:19         ` Tobias Burnus [this message]
2010-11-07 14:21           ` Janus Weil
2010-11-07 15:34           ` Tobias Schlüter
2010-11-07 15:50             ` Janus Weil
2010-11-07 16:39               ` Tobias Schlüter
2010-11-07 16:30       ` Steve Kargl
  -- strict thread matches above, loose matches on Subject: below --
2010-11-06 20:11 Janus Weil
2010-11-06 21:03 ` Thomas Koenig
2010-11-06 21:23   ` Janus Weil
2010-11-07 16:52 ` Tobias Burnus
2010-11-07 18:44   ` Janus Weil
2010-11-08 13:27     ` Tobias Burnus
2010-11-09 10:41       ` Janus Weil
2018-09-17  8:59         ` Bernhard Reutner-Fischer
2018-09-17 19:22           ` Janus Weil
2018-09-17 20:25             ` Janus Weil
2018-09-19 14:50               ` Bernhard Reutner-Fischer
2018-09-20 19:36                 ` Janus Weil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CD6A751.6090807@net-b.de \
    --to=burnus@net-b.de \
    --cc=dominiq@lps.ens.fr \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=janus@gcc.gnu.org \
    --cc=tkoenig@netcologne.de \
    --cc=tobias.schlueter@physik.uni-muenchen.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).