Hi, As Wilco mentioned in PR78809 after I checked in the last part of implementation of inline strcmp:
See http://www.iso-9899.info/n1570.html section 7.24.4: "The sign of a nonzero value returned by the comparison functions memcmp, strcmp, and strncmp is determined by the sign of the difference between the values of the first pair of characters (both interpreted as unsigned char) that differ in the objects being compared." currently, in my implementation, I used char type when expanding strcmp/strncmp, and unsigned char when expanding memcmp. from the C standard, we should use unsigned char for all strcmp/strncmp/memcmp. the change is quite simple, and I have tested it on X86, aarch64 and powerPC, no regressions. Okay for trunk? Qing gcc/ChangeLog: +2018-07-19 Qing Zhao <qing.z...@oracle.com> + + * builtins.c (expand_builtin_memcmp): Delete the last parameter for + call to inline_expand_builtin_string_cmp. + (expand_builtin_strcmp): Likewise. + (expand_builtin_strncmp): Likewise. + (inline_string_cmp): Delete the last parameter, change char_type_node + to unsigned_char_type_node for strcmp/strncmp; + (inline_expand_builtin_string_cmp): Delete the last parameter. +
78809C_uchar.patch
Description: Binary data