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