add a test and a couple minor bug fixes for the implicit-signed-integer-truncation sanitizer. This is PR#40566

llvm-svn: 352926
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 2e719bc428d27345da7cdcfa634c03ec69f31474
diff --git a/include/sstream b/include/sstream
index 71204e0..14c9197 100644
--- a/include/sstream
+++ b/include/sstream
@@ -558,7 +558,7 @@
             char_type* __p = const_cast<char_type*>(__str_.data());
             this->setg(__p, __p + __ninp, __hm_);
         }
-        return this->sputc(__c);
+        return this->sputc(traits_type::to_char_type(__c));
     }
     return traits_type::not_eof(__c);
 }