warning: comparison with string literal results in unspecified behaviour

Andrew Haley aph@redhat.com
Tue Jan 22 12:32:00 GMT 2008


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");



More information about the Gcc-help mailing list