aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/OutputGen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/OutputGen.cc')
-rw-r--r--lib/CodeGen/OutputGen.cc17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/CodeGen/OutputGen.cc b/lib/CodeGen/OutputGen.cc
index c4ceb79..c1ea4b6 100644
--- a/lib/CodeGen/OutputGen.cc
+++ b/lib/CodeGen/OutputGen.cc
@@ -13,6 +13,13 @@ Value *CodeGen::emitStringNullGuard(Value *StrVal) {
void CodeGen::emitOutputValue(Value *Val, const TypeInfo *Info, bool AppendNewline) {
if (!Val || !Info) return;
+ if (Info->isString()) {
+ Value *Text = emitStringCString(Val);
+ if (Text) Builder->CreateCall(PrintfFunc, {
+ AppendNewline ? PrintfStringFormatStr
+ : Builder->CreateGlobalString("%s", "fmt_str_inline", 0, TheModule.get()), Text});
+ return;
+ }
std::vector<Value*> Args;
Value *Fmt = nullptr;
@@ -38,16 +45,6 @@ void CodeGen::emitOutputValue(Value *Val, const TypeInfo *Info, bool AppendNewli
break;
}
- case TypeKind::String: {
- Value *StrVal = emitStringNullGuard(Val);
- Fmt = AppendNewline
- ? PrintfStringFormatStr
- : Builder->CreateGlobalString("%s", "fmt_str_inline", 0, TheModule.get());
- Args.push_back(Fmt);
- Args.push_back(StrVal);
- break;
- }
-
case TypeKind::Char: {
Value *CharVal = coerceValueToType(Val, resolveType("CHAR"));
Value *Promoted = Builder->CreateZExt(CharVal, Type::getInt32Ty(*TheContext), "char_for_printf");