From: Marc Mason <mpeg.blue@free.fr>
To: gcc@gcc.gnu.org
Subject: (int *const) function parameter
Date: Fri, 14 Aug 2009 17:28:00 -0000 [thread overview]
Message-ID: <4A8562B2.7020608@free.fr> (raw)
Hello,
The following code is rejected by one compiler, while it is accepted by gcc
without any warning. Several people in comp.lang.c seem to think that it is a
bug in the first compiler which should ***not*** reject the program.
Message-ID: <h63e5s$ecu$1@aioe.org>
http://groups.google.com/group/comp.lang.c/browse_frm/thread/2858a1c9ccdcd741
I'd like to ask what you think.
typedef int fun_t(int *p);
int foo1( int * p) { return *p; }
int foo2(const int * p) { return *p; }
int foo3( int *const p) { return *p; }
int foo4(const int *const p) { return *p; }
void zozo(void)
{
fun_t *fp;
fp = foo1;
fp = foo2; /* GCC WARNS */
fp = foo3;
fp = foo4; /* GCC WARNS */
}
(I run gcc 4.3.2 under cygwin.)
$ gcc -std=c89 -pedantic -Wall -Wextra -O2 -c mu2.c
mu2.c: In function 'zozo':
mu2.c:12: warning: assignment from incompatible pointer type
mu2.c:14: warning: assignment from incompatible pointer type
$ cc -c mu2.c
E "mu2.c",L12/C8(#416): foo2
| Type `int(const int * p)' ("mu2.c",L4/C5) can't be converted to type
`fun_t(*)'.
| (See also type `fun_t' (= `int(int * p)') ("mu2.c",L1/C13)).
E "mu2.c",L13/C8(#416): foo3
| Type `int(int *const p)' ("mu2.c",L5/C5) can't be converted to type `fun_t(*)'.
| (See also type `fun_t' (= `int(int * p)') ("mu2.c",L1/C13)).
E "mu2.c",L14/C8(#416): foo4
| Type `int(const int *const p)' ("mu2.c",L6/C5) can't be converted to type
`fun_t(*)'.
| (See also type `fun_t' (= `int(int * p)') ("mu2.c",L1/C13)).
3 user errors No warnings
The relevant line is line 13 i.e. fp = foo3;
(cc's warnings are cosmetically different if I write fp = &foo3;)
E "mu2.c",L13/C8(#416):
| Type `int(*)(int *const p)' can't be converted to type `fun_t(*)'.
| (See also type `int(int *const p)' ("mu2.c",L5/C5)).
| (See also type `fun_t' (= `int(int * p)') ("mu2.c",L1/C13)).
In short, cc refuses to convert
an "int (*)(int *const)" pointer to an "int (*)(int *)" pointer.
Would you say this is a bug in cc?
--
Regards.
next reply other threads:[~2009-08-14 13:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-14 17:28 Marc Mason [this message]
2009-08-14 17:40 ` Joseph S. Myers
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=4A8562B2.7020608@free.fr \
--to=mpeg.blue@free.fr \
--cc=gcc@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).