aboutsummaryrefslogtreecommitdiff
path: root/src/llvm.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm.cff')
-rw-r--r--src/llvm.cff10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/llvm.cff b/src/llvm.cff
index a33ca56..c4528e8 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -1017,7 +1017,8 @@ fn genstmt(f *Fn, block *Block, st *Stmt) void {
if c.capt {
gen("\t%%%s.%d = alloca %t\n", c.capt, c.captid, c.captty);
let valaddr = mktmp(mkptrtype(c.fld.ty));
- gen("\t%v = getelementptr i8, %t %v, i32 %d\n", valaddr, exaddr.ty, exaddr, as(int)c.fld.off);
+ gen("\t%v = getelementptr i8, %t %v, i32 %d\n", valaddr, exaddr.ty, exaddr,
+ as(int)c.fld.off);
if c.captptr {
gen("\tstore %t %v, %t %%%s.%d\n", valaddr.ty, valaddr, mkptrtype(c.captty), c.capt, c.captid);
} else {
@@ -1167,6 +1168,13 @@ fn gendata(ty *const Type, ex *Expr) void {
case BoolLit b; return gen("%d", b);
case NullLit; return gen("null");
case ZeroIni; return gen("zeroinitializer");
+ case StrLit s;
+ if ty->is(:Arr) {
+ return gen("c%S", s);
+ } else {
+ strs->push(s);
+ return gen("@.str.%z", strs.len - 1);
+ }
}
assert(#f, "bad static");
}