<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - strcmp() (that does "x"[3]) generates an unused-value warning on 32bit"
   href="http://llvm.org/bugs/show_bug.cgi?id=21614">21614</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>strcmp() (that does "x"[3]) generates an unused-value warning on 32bit
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>-New Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>lkundrak@v3.sk
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>On Fedora 21 with glibc 2.20 the following happens:

[lkundrak@belphegor libnm-core]$ cat tc1.c 
#include <string.h>

void
f ()
{
    strcmp ("something", "0");
}

[lkundrak@belphegor libnm-core]$ clang -O2 -Wno-unused-value -c tc1.c
tc1.c:6:1986: warning: array index 2 is past the end of the array (which
contains 2 elements) [-Warray-bounds]
 __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p
("something") && __builtin_constant_p ("0") && (__s1_len = strlen
("something"), __s2_len = strlen ("0"), (!((size_t)(const void *)(("something")
+ 1) - (size_t)(const void *)("something") == 1) || __s1_len >= 4) &&
(!((size_t)(const void *)(("0") + 1) - (size_t)(const void *)("0") == 1) ||
__s2_len >= 4)) ? __builtin_strcmp ("something", "0") : (__builtin_constant_p
("something") && ((size_t)(const void *)(("something") + 1) - (size_t)(const
void *)("something") == 1) && (__s1_len = strlen ("something"), __s1_len < 4) ?
(__builtin_constant_p ("0") && ((size_t)(const void *)(("0") + 1) -
(size_t)(const void *)("0") == 1) ? __builtin_strcmp ("something", "0") :
(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const
char *) ("0"); int __result = (((const unsigned char *) (const char *)
("something"))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result =
(((const unsigned char *) (const char *) ("something"))[1] - __s2[1]); if
(__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const
char *) ("something"))[2] - __s2[2]); if (__s1_len > 2 && __result == 0)
__result = (((const unsigned char *) (const char *) ("something"))[3] -
__s2[3]); } } __result; }))) : (__builtin_constant_p ("0") && ((size_t)(const
void *)(("0") + 1) - (size_t)(const void *)("0") == 1) && (__s2_len = strlen
("0"), __s2_len < 4) ? (__builtin_constant_p ("something") && ((size_t)(const
void *)(("something") + 1) - (size_t)(const void *)("something") == 1) ?
__builtin_strcmp ("something", "0") : (- (__extension__ ({ const unsigned char
*__s2 = (const unsigned char *) (const char *) ("something"); int __result =
(((const unsigned char *) (const char *) ("0"))[0] - __s2[0]); if (__s2_len > 0
&& __result == 0) { __result = (((const unsigned char *) (const char *)
("0"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const
unsigned char *) (const char *) ("0"))[2] - __s2[2]); if (__s2_len > 2 &&
__result == 0) __result = (((const unsigned char *) (const char *) ("0"))[3] -
__s2[3]); } } __result; })))) : __builtin_strcmp ("something", "0")))); });
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                 ^     ~
tc1.c:6:2095: warning: array index 3 is past the end of the array (which
contains 2 elements) [-Warray-bounds]
 __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p
("something") && __builtin_constant_p ("0") && (__s1_len = strlen
("something"), __s2_len = strlen ("0"), (!((size_t)(const void *)(("something")
+ 1) - (size_t)(const void *)("something") == 1) || __s1_len >= 4) &&
(!((size_t)(const void *)(("0") + 1) - (size_t)(const void *)("0") == 1) ||
__s2_len >= 4)) ? __builtin_strcmp ("something", "0") : (__builtin_constant_p
("something") && ((size_t)(const void *)(("something") + 1) - (size_t)(const
void *)("something") == 1) && (__s1_len = strlen ("something"), __s1_len < 4) ?
(__builtin_constant_p ("0") && ((size_t)(const void *)(("0") + 1) -
(size_t)(const void *)("0") == 1) ? __builtin_strcmp ("something", "0") :
(__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const
char *) ("0"); int __result = (((const unsigned char *) (const char *)
("something"))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result =
(((const unsigned char *) (const char *) ("something"))[1] - __s2[1]); if
(__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const
char *) ("something"))[2] - __s2[2]); if (__s1_len > 2 && __result == 0)
__result = (((const unsigned char *) (const char *) ("something"))[3] -
__s2[3]); } } __result; }))) : (__builtin_constant_p ("0") && ((size_t)(const
void *)(("0") + 1) - (size_t)(const void *)("0") == 1) && (__s2_len = strlen
("0"), __s2_len < 4) ? (__builtin_constant_p ("something") && ((size_t)(const
void *)(("something") + 1) - (size_t)(const void *)("something") == 1) ?
__builtin_strcmp ("something", "0") : (- (__extension__ ({ const unsigned char
*__s2 = (const unsigned char *) (const char *) ("something"); int __result =
(((const unsigned char *) (const char *) ("0"))[0] - __s2[0]); if (__s2_len > 0
&& __result == 0) { __result = (((const unsigned char *) (const char *)
("0"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const
unsigned char *) (const char *) ("0"))[2] - __s2[2]); if (__s2_len > 2 &&
__result == 0) __result = (((const unsigned char *) (const char *) ("0"))[3] -
__s2[3]); } } __result; })))) : __builtin_strcmp ("something", "0")))); });
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
                                                                               
              ^     ~
2 warnings generated.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>