public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "kargl at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/102079] Misleading -Wlto-type-mismatch warning on wrong float type to C function
Date: Sun, 26 Sep 2021 16:42:21 +0000	[thread overview]
Message-ID: <bug-102079-4-40fCxvSzmF@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-102079-4@http.gcc.gnu.org/bugzilla/>

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

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #5 from kargl at gcc dot gnu.org ---
(In reply to Thomas Koenig from comment #4)
> (In reply to Jan Hubicka from comment #3)
> > I think the problem here is that fortran uses "long int" while size_t
> > interoperate with "unsigned long int".
> > Does fortran standard promise that the value should inter-operate with
> > size_t as well?
> 
> This is a matter for the compiler.
> 
> In this case, the documentation states
> 
> For arguments of @code{CHARACTER} type, the character length is passed
> as a hidden argument at the end of the argument list.  For
> deferred-length strings, the value is passed by reference, otherwise
> by value.  The character length has the C type @code{size_t} (or
> @code{INTEGER(kind=C_SIZE_T)} in Fortran).
> 
> so the documentation is actually inconsistent (but then, interoperbility
> between Fortran integers and C unsigned types is sort of assumed).
> The library uses gfc_charlen_type, which is a typedef to size_t.
> 
> So, we can fix this either way.  It would probably be best to have
> size_t in the character lengths in the front end as well.

The Fortran 2018 standard in section 18 specific discusses unsigned
integers.  Table 18.2 shows that CHARACTER(KIND=C_SIGNED_CHAR)
interoperates with with C's signed char or unsigned char.  It further
shows that C_SIZE_T is interoperates with C's size_t. The Fortran
standard does not have a C_SSIZE_T kind type parameter.  There is,
however, a non-normative note. From 18-007r1.pdf (aka Fortran 2021),
page 475

   NOTE 1

   ISO/IEC 9899:2011 specifies that the representations for nonnegative
   signed integers are the same as the corresponding values of unsigned
   integers.  Because Fortran does not provide direct support for unsigned
   kinds of integers, the ISO_C_BINDING module does not make accessible
   named constants for their kind type parameter values. A user can use
   the signed kinds of integers to interoperate with the unsigned types
   and all their qualified versions as well. This has the potentially
   surprising side effect that the C type unsigned char is interoperable
   with the type integer with a kind type parameter of C_SIGNED_CHAR.

Now, for the problem at hand, the hidden argument could be passed as
a c_ssize_t.  A Fortan string can never have a negative length. The
only thing that might be of a concern is breaking the libgfortran ABI,
and causing mixed-language programmers who do not use the features of
Section 18 some heartburn.

  parent reply	other threads:[~2021-09-26 16:42 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-26 14:04 [Bug fortran/102079] New: " rimvydas.jas at gmail dot com
2021-08-26 14:07 ` [Bug fortran/102079] " rimvydas.jas at gmail dot com
2021-08-26 14:17 ` rguenth at gcc dot gnu.org
2021-09-26 11:12 ` hubicka at gcc dot gnu.org
2021-09-26 12:57 ` tkoenig at gcc dot gnu.org
2021-09-26 16:42 ` kargl at gcc dot gnu.org [this message]
2021-09-27  7:40 ` rguenther at suse dot de

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=bug-102079-4-40fCxvSzmF@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /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).