aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2008-02-23 00:52:04 +0000
committerTed Kremenek <kremenek@apple.com>2008-02-23 00:52:04 +0000
commit471733d84639fcea35d7876940d7d32fa575e158 (patch)
tree5fae806423561e9ef4a37a706f4bd80434992b6f
parentd156d536e1fb9defcf187da64e7765ec058580eb (diff)
Patch from Argiris Kirtzidis:
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
-rw-r--r--AST/StmtPrinter.cpp2
-rw-r--r--AST/StmtSerialization.cpp5
2 files changed, 5 insertions, 2 deletions
diff --git a/AST/StmtPrinter.cpp b/AST/StmtPrinter.cpp
index 668902708d..74d94eacf6 100644
--- a/AST/StmtPrinter.cpp
+++ b/AST/StmtPrinter.cpp
@@ -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 << "'";
diff --git a/AST/StmtSerialization.cpp b/AST/StmtSerialization.cpp
index 0b3f231ba7..a2006057bf 100644
--- a/AST/StmtSerialization.cpp
+++ b/AST/StmtSerialization.cpp
@@ -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);