From 10b452646a2ca3e3c21957ac7e03f47d850ca9f3 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Mon, 6 Jun 2016 14:35:22 +0000 Subject: [PATCH] Remove arithmetic +/-127 on chars; results in UB when dealing with signed chars. Thanks to STL@microsoft for the report. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@271897 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../lt.pass.cpp | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp index 3ff9c0f1f..2aa96dca8 100644 --- a/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp +++ b/test/std/strings/char.traits/char.traits.specializations/char.traits.specializations.char/lt.pass.cpp @@ -1,6 +1,6 @@ //===----------------------------------------------------------------------===// // -// The LLVM Compiler Infrastructure +// The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. @@ -18,11 +18,16 @@ int main() { - char c = '\0'; - assert(!std::char_traits::lt('a', 'a')); - assert( std::char_traits::lt('A', 'a')); - assert(!std::char_traits::lt('A' + 127, 'a')); - assert(!std::char_traits::lt('A' - 127, 'a')); - assert( std::char_traits::lt('A', 'a' + 127)); - assert( std::char_traits::lt('A', 'a' - 127)); + assert( std::char_traits::lt('\0', 'A')); + assert(!std::char_traits::lt('A', '\0')); + + assert(!std::char_traits::lt('a', 'a')); + assert( std::char_traits::lt('A', 'a')); + assert(!std::char_traits::lt('a', 'A')); + + assert( std::char_traits::lt('a', 'z')); + assert( std::char_traits::lt('A', 'Z')); + + assert( std::char_traits::lt(' ', 'A')); + assert( std::char_traits::lt('A', '~')); }