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);
|
||||
|
||||
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
|
||||
{
|
||||
BEValue value;
|
||||
llvm_emit_expr(c, &value, decl->var.init_expr);
|
||||
init_value = llvm_value_rvalue_store(c, &value);
|
||||
if (init_expr->expr_kind == EXPR_CONST && init_expr->const_expr.kind == TYPE_ARRAY)
|
||||
{
|
||||
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
|
||||
|
||||
@@ -2499,7 +2499,7 @@ static void llvm_emit_const_expr(GenContext *c, BEValue *be_value, Expr *expr)
|
||||
1));
|
||||
llvm_set_alignment(global_name, 1);
|
||||
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;
|
||||
}
|
||||
case ALL_INTS:
|
||||
|
||||
@@ -6,8 +6,8 @@ char[*] foo64 = b64"SGVsbG8gV29ybGQ=";
|
||||
|
||||
// #expect: byte_literals.ll
|
||||
|
||||
@.bytes = private constant [1 x i8] c"\A0", align 1
|
||||
@.bytes.5 = private constant [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
|
||||
@.bytes.7 = private constant [5 x i8] c"EI#M\ED", align 1
|
||||
@.bytes.8 = private constant [11 x i8] c"Hello World", align 1
|
||||
@byte_literals.foob = global [1 x i8] c"\A0", align 1
|
||||
@byte_literals.fooz = global [7 x i8] c"\00\AA\BB\CC\DD\EE\FF", align 1
|
||||
@byte_literals.fooy = global [4 x i8] c"\DE\AD\BE\EF", align 1
|
||||
@byte_literals.foow = global [5 x i8] c"EI#M\ED", align 1
|
||||
@byte_literals.foo64 = global [11 x i8] c"Hello World", align 1
|
||||
|
||||
Reference in New Issue
Block a user