public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
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);
     }
}

  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).