Fix PR1525:

Use a better determinator for identifying constant array initializers that
are or are not zero terminated and generate code appropriately.

llvm-svn: 37720
This commit is contained in:
Reid Spencer 2007-06-25 16:45:54 +00:00
parent a866514528
commit 36d4c07500
1 changed files with 10 additions and 4 deletions

View File

@ -720,12 +720,18 @@ void CppWriter::printConstant(const Constant *CV) {
} else if (const ConstantArray *CA = dyn_cast<ConstantArray>(CV)) {
if (CA->isString() && CA->getType()->getElementType() == Type::Int8Ty) {
Out << "Constant* " << constName << " = ConstantArray::get(\"";
printEscapedString(CA->getAsString());
std::string tmp = CA->getAsString();
bool nullTerminate = false;
if (tmp[tmp.length()-1] == 0) {
tmp.erase(tmp.length()-1);
nullTerminate = true;
}
printEscapedString(tmp);
// Determine if we want null termination or not.
if (CA->getType()->getNumElements() <= CA->getAsString().length())
Out << "\", false";// No null terminator
else
if (nullTerminate)
Out << "\", true"; // Indicate that the null terminator should be added.
else
Out << "\", false";// No null terminator
Out << ");";
} else {
Out << "std::vector<Constant*> " << constName << "_elems;";