]> granicus.if.org Git - clang/commitdiff
Patch from Argiris Kirtzidis:
authorTed Kremenek <kremenek@apple.com>
Sat, 23 Feb 2008 00:52:04 +0000 (00:52 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 23 Feb 2008 00:52:04 +0000 (00:52 +0000)
The patch fixes some debug assertions that the msvcrt throws:

1)
-    if (isprint(value) && value < 256) {
+    if (value < 256 && isprint(value)) {

isprint() does an assertion check of its own for value < 256; check value before calling it to prevent it.

2)
-    Stmt->Names.push_back(std::string(&data[0], data.size()));
+    if (data.size() == 0)
+      Stmt->Names.push_back(std::string());
+    else
+      Stmt->Names.push_back(std::string(&data[0], data.size()));

If data.size() == 0 then data[0] throws "out of range" assertion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47512 91177308-0d34-0410-b5e6-96231b3b80d8

AST/StmtPrinter.cpp
AST/StmtSerialization.cpp

index 668902708d3112da2f72a60ddf436e0c146d0760..74d94eacf62640784936141889229ebe3ce3e8de 100644 (file)
@@ -536,7 +536,7 @@ void StmtPrinter::VisitCharacterLiteral(CharacterLiteral *Node) {
     OS << "'\\v'";
     break;
   default:
-    if (isprint(value) && value < 256) {
+    if (value < 256 && isprint(value)) {
       OS << "'" << (char)value << "'";
     } else if (value < 256) {
       OS << "'\\x" << std::hex << value << std::dec << "'";
index 0b3f231ba7f7c330ea26637deaa9acea3bab74dc..a2006057bfb5e50cda312ffea188af0df9913560 100644 (file)
@@ -270,7 +270,10 @@ AsmStmt* AsmStmt::CreateImpl(Deserializer& D) {
     std::vector<char> data;
     D.ReadCStr(data, false);
     
-    Stmt->Names.push_back(std::string(&data[0], data.size()));
+    if (data.size() == 0)
+      Stmt->Names.push_back(std::string());
+    else
+      Stmt->Names.push_back(std::string(&data[0], data.size()));
   }    
 
   Stmt->Constraints.reserve(size);