mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Fix in byte output for globals.
This commit is contained in:
@@ -349,17 +349,28 @@ void llvm_emit_global_variable_init(GenContext *c, Decl *decl)
|
|||||||
|
|
||||||
ByteSize alignment = type_alloca_alignment(decl->type);
|
ByteSize alignment = type_alloca_alignment(decl->type);
|
||||||
|
|
||||||
if (decl->var.init_expr)
|
Expr *init_expr = decl->var.init_expr;
|
||||||
|
if (init_expr)
|
||||||
{
|
{
|
||||||
if (decl->var.init_expr->expr_kind == EXPR_INITIALIZER_LIST)
|
if (init_expr->expr_kind == EXPR_INITIALIZER_LIST)
|
||||||
{
|
{
|
||||||
init_value = llvm_emit_const_aggregate(c, decl->var.init_expr, &modified);
|
init_value = llvm_emit_const_aggregate(c, init_expr, &modified);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BEValue value;
|
BEValue value;
|
||||||
llvm_emit_expr(c, &value, decl->var.init_expr);
|
if (init_expr->expr_kind == EXPR_CONST && init_expr->const_expr.kind == TYPE_ARRAY)
|
||||||
init_value = llvm_value_rvalue_store(c, &value);
|
{
|
||||||
|
init_value = LLVMConstStringInContext(c->context,
|
||||||
|
init_expr->const_expr.bytes.ptr,
|
||||||
|
init_expr->const_expr.bytes.len,
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
llvm_emit_expr(c, &value, decl->var.init_expr);
|
||||||
|
init_value = llvm_value_rvalue_store(c, &value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -2499,7 +2499,7 @@ static void llvm_emit_const_expr(GenContext *c, BEValue *be_value, Expr *expr)
|
|||||||
1));
|
1));
|
||||||
llvm_set_alignment(global_name, 1);
|
llvm_set_alignment(global_name, 1);
|
||||||
global_name = LLVMConstBitCast(global_name, LLVMPointerType(llvm_get_type(c, type_char), 0));
|
global_name = LLVMConstBitCast(global_name, LLVMPointerType(llvm_get_type(c, type_char), 0));
|
||||||
llvm_value_set(be_value, global_name, type);
|
llvm_value_set_address(be_value, global_name, type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ALL_INTS:
|
case ALL_INTS:
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ char[*] foo64 = b64"SGVsbG8gV29ybGQ=";
|
|||||||
|
|
||||||
// #expect: byte_literals.ll
|
// #expect: byte_literals.ll
|
||||||
|
|
||||||
@.bytes = private constant [1 x i8] c"\A0", align 1
|
@byte_literals.foob = global [1 x i8] c"\A0", align 1
|
||||||
@.bytes.5 = private constant [7 x i8] c"\00\AA\BB\CC\DD\EE\FF", align 1
|
@byte_literals.fooz = global [7 x i8] c"\00\AA\BB\CC\DD\EE\FF", align 1
|
||||||
@.bytes.6 = private constant [4 x i8] c"\DE\AD\BE\EF", align 1
|
@byte_literals.fooy = global [4 x i8] c"\DE\AD\BE\EF", align 1
|
||||||
@.bytes.7 = private constant [5 x i8] c"EI#M\ED", align 1
|
@byte_literals.foow = global [5 x i8] c"EI#M\ED", align 1
|
||||||
@.bytes.8 = private constant [11 x i8] c"Hello World", align 1
|
@byte_literals.foo64 = global [11 x i8] c"Hello World", align 1
|
||||||
|
|||||||
Reference in New Issue
Block a user