Make static int[] a = [1, 2]; a[0] = 4; not segfault

by making the array data ptr a non-const global variable.
This commit is contained in:
Christian Kamm
2009-05-03 11:16:54 +02:00
parent c831367b24
commit 77100f890c
3 changed files with 15 additions and 2 deletions
+3 -1
View File
@@ -317,7 +317,9 @@ LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit)
return constarr;
// for dynamic array we need to make a global with the data, so we have a pointer for the dynamic array
LLGlobalVariable* gvar = new LLGlobalVariable(constarr->getType(), true, LLGlobalValue::InternalLinkage, constarr, ".constarray", gIR->module);
// Important: don't make the gvar constant, since this const initializer might
// be used as an initializer for a static T[] - where modifying contents is allowed.
LLGlobalVariable* gvar = new LLGlobalVariable(constarr->getType(), false, LLGlobalValue::InternalLinkage, constarr, ".constarray", gIR->module);
LLConstant* idxs[2] = { DtoConstUint(0), DtoConstUint(0) };
LLConstant* gep = llvm::ConstantExpr::getGetElementPtr(gvar,idxs,2);