From: Russell Shaw <rjshaw@netspace.net.au>
Cc: gcc-help@gcc.gnu.org
Subject: Re: warning: comparison with string literal results in unspecified behaviour
Date: Tue, 22 Jan 2008 12:48:00 -0000 [thread overview]
Message-ID: <47947C1E.3000502@netspace.net.au> (raw)
In-Reply-To: <4794757E.3020108@redhat.com>
Andrew Haley wrote:
> Russell Shaw wrote:
>> Andrew Haley wrote:
>>> Russell Shaw wrote:
>>>> How do i disable that? My code explicitly compares string pointers.
>>>
>>> The best way is to intern all your strings. String interning is a
>>> fairly common efficient technique and you can look it up in Google.
>>
>> I've seen that in Xlib code. There's no reason to do it if you're
>> not storing strings on a remote host.
>
> Not necessarily.
>
>> I store pointers to const strings in various objects and use them
>> much like magic numbers, so direct pointer comparisons are the ideal
>> thing to do.
>>
>> This warning never happened on older gcc versions.
>>
>> Infact, the warning is incorrect for this valid use.
>>
>> It's just unnecessary nannying.
>>
>> I've been using it in thousands of lines of code for 5 years.
>
> OK, this might be a bug in gcc. I just looked at the gcc source
> (appended below) and as far as I can see that message is only
> generated when there is a real error such as
>
> if (str == "Hello")
>
> Do you have a case where conforming code triggers this warning?
>
> Andrew.
>
>
> /* Warn about comparisons against string literals, with the exception
> of testing for equality or inequality of a string literal with
> NULL. */
> if (code == EQ_EXPR || code == NE_EXPR)
> {
> if ((code1 == STRING_CST && !integer_zerop (arg2.value))
> || (code2 == STRING_CST && !integer_zerop (arg1.value)))
> warning (OPT_Waddress, "comparison with string literal results in
> unspecified behavior");
> }
> else if (TREE_CODE_CLASS (code) == tcc_comparison
> && (code1 == STRING_CST || code2 == STRING_CST))
> warning (OPT_Waddress, "comparison with string literal results in
> unspecified behavior");
Hi,
I just found from the gcc list that Wno-address stops the complaints.
I couldn't find that option on the gcc-3.4.3 manpage.
Here is some code:
#include<stdio.h>
#include<stdlib.h>
#define MAGIC "object"
#define TYPE1 "type1"
#define TYPE2 "type2"
#define OB1(ob) (ob->type == TYPE1)
#define OB2(ob) (ob->type == TYPE2)
#define IS_OBJ (ob->magic == MAGIC)
typedef struct {
const char *magic;
const char *type;
} Object;
static Object *
object_new(const char *type)
{
Object *object = calloc(1, sizeof(Object));
object->magic = MAGIC;
object->type = type;
return object;
}
int
main(int argc, char **argv)
{
Object *ob1 = object_new(TYPE1);
Object *ob2 = object_new(TYPE2);
Object *ob3 = ob2;
if(ob1->type == ob2->type) {
printf("same, %s %s\n", ob1->type, ob2->type);
}
else {
printf("different, %s %s\n", ob1->type, ob2->type);
}
if(ob2->type == ob3->type) {
printf("same, %s %s\n", ob2->type, ob3->type);
}
else {
printf("different, %s %s\n", ob2->type, ob3->type);
}
if(ob3->magic == MAGIC) {
printf("is object, %s\n", ob3->type);
}
}
next prev parent reply other threads:[~2008-01-21 11:04 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-21 11:20 Russell Shaw
2008-01-21 21:59 ` Andrew Haley
2008-01-22 11:29 ` Russell Shaw
2008-01-22 12:32 ` Andrew Haley
2008-01-22 12:48 ` Russell Shaw [this message]
2008-01-22 13:25 ` Russell Shaw
2008-01-22 13:31 ` Russell Shaw
2008-01-22 13:45 ` Andrew Haley
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=47947C1E.3000502@netspace.net.au \
--to=rjshaw@netspace.net.au \
--cc=gcc-help@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).