Skip to content

Commit

Permalink
Merge pull request #1128 from klickverbot/vector-init
Browse files Browse the repository at this point in the history
Fix misaligned vector variable initializers
  • Loading branch information
dnadlinger committed Sep 26, 2015
2 parents 97819eb + c897015 commit b313929
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 6 deletions.
6 changes: 3 additions & 3 deletions gen/arrays.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,15 +363,15 @@ static void DtoSetArray(DValue* array, LLValue* dim, LLValue* ptr)

//////////////////////////////////////////////////////////////////////////////////////////

LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit)
LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit, Type* targetType)
{
IF_LOG Logger::println("DtoConstArrayInitializer: %s | %s", arrinit->toChars(), arrinit->type->toChars());
IF_LOG Logger::println("DtoConstArrayInitializer: %s | %s", arrinit->toChars(), targetType->toChars());
LOG_SCOPE;

assert(arrinit->value.dim == arrinit->index.dim);

// get base array type
Type* arrty = arrinit->type->toBasetype();
Type* arrty = targetType->toBasetype();
size_t arrlen = arrinit->dim;

// for statis arrays, dmd does not include any trailing default
Expand Down
7 changes: 5 additions & 2 deletions gen/arrays.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@ llvm::StructType* DtoArrayType(Type* arrayTy);
llvm::StructType* DtoArrayType(LLType* elemTy);
llvm::ArrayType* DtoStaticArrayType(Type* sarrayTy);

LLType* DtoConstArrayInitializerType(ArrayInitializer* arrinit);
LLConstant* DtoConstArrayInitializer(ArrayInitializer* si);
/// Creates a (global) constant with the element data for the given arary
/// initializer. targetType is explicit because the frontend sometimes emits
/// ArrayInitializers for vectors typed as static arrays.
LLConstant* DtoConstArrayInitializer(ArrayInitializer* si, Type* targetType);

LLConstant* DtoConstSlice(LLConstant* dim, LLConstant* ptr, Type *type = 0);

/// Returns whether the array literal can be evaluated to a (LLVM) constant.
Expand Down
2 changes: 1 addition & 1 deletion gen/llvmhelpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1178,7 +1178,7 @@ LLConstant* DtoConstInitializer(Loc& loc, Type* type, Initializer* init)
else if (ArrayInitializer* ai = init->isArrayInitializer())
{
Logger::println("const array initializer");
_init = DtoConstArrayInitializer(ai);
_init = DtoConstArrayInitializer(ai, type);
}
else if (init->isVoidInitializer())
{
Expand Down

0 comments on commit b313929

Please sign in to comment.