[llvm-dev] Creating a global variable for a struct array

Niddodi, Chaitra via llvm-dev llvm-dev at lists.llvm.org
Thu Oct 1 08:00:47 PDT 2020


>The type you pass to GlobalVariable's constructor for that variable
should be "[10 x %struct.dlist]" because that's what you want storage
for. Then the GlobalVariable itself will be a Constant of type "[10 x
%struct.dlist]*".

Yes, I verified that this is the case.

I enabled assertions and the error seems to occur while creating GlobalVariable for both struct dhash and struct dlist.




Here is a simpler version of the code causing error:

//struct dhash
typedef struct dhash{
char* filenm;
int n;
}dhash;

//create global variable to hold filename string
Constant *filenmInit = ConstantDataArray::getString(M.getContext(), "myfile.txt");
Constant *filenmConst = new GlobalVariable(M, filenmInit->getType(), false,
                                     GlobalVariable::ExternalLinkage, filenmInit, ".filenm");

//create global variable for int
Constant* intInit = ConstantInt::get(Type::getInt32Ty(M.getContext()), 10);
Constant* intConst = new GlobalVariable(M, intInit->getType(), false,
                                           GlobalVariable::ExternalLinkage, intInit, ".int");

//create ConstantStruct for each hashtable entry
Constant *dhashInit[] = {filenmConst, intConst};
Constant *dhashConst = ConstantStruct::get(dhashTy, dhashInit);

Constant* htabInitArr[2];
htabInitArr[0] = dhashConst;
htabInitArr[1] = dhashConst;

    ArrayType *htabTy = ArrayType::get(dhashTy, 2);
    Constant *htabInit = ConstantArray::get(htabTy, makeArrayRef(htabInitArr,2));
    GlobalVariable *htabConst = new GlobalVariable(M, htabInit->getType(), false,
                                            GlobalVariable::ExternalLinkage, htabInit, "htab");





Here is the error message:

opt: /home/chaitra/llvm-5-src/lib/IR/Constants.cpp:879: llvm::ConstantAggregate::ConstantAggregate(llvm::CompositeType*, llvm::Value::ValueTy, llvm::ArrayRef<llvm::Constant*>): Assertion `V[I]->getType() == T->getTypeAtIndex(I) && "Initializer for composite element doesn't match!"' failed.
#0 0x0000000001e558fa (opt+0x1e558fa)
#1 0x0000000001e5366e (opt+0x1e5366e)
#2 0x0000000001e537e2 (opt+0x1e537e2)
#3 0x00007f8a98a55390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
#4 0x00007f8a977c7438 gsignal /build/glibc-e6zv40/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
#5 0x00007f8a977c903a abort /build/glibc-e6zv40/glibc-2.23/stdlib/abort.c:91:0
#6 0x00007f8a977bfbe7 __assert_fail_base /build/glibc-e6zv40/glibc-2.23/assert/assert.c:92:0
#7 0x00007f8a977bfc92 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc92)
#8 0x000000000189c982 (opt+0x189c982)
#9 0x000000000189cc7c (opt+0x189cc7c)
#10 0x00000000018a93e0 (opt+0x18a93e0)
#11 0x00000000018a95f3 (opt+0x18a95f3)
#12 0x00007f8a9758e59a iospecns::storage_bitcode::runOnModule(llvm::Module&) (/home/chaitra/Desktop/iospec_test/test/build/proj/libstorage_bitcode.so+0x459a)
#13 0x00000000019473ad (opt+0x19473ad)
#14 0x00000000006db61c (opt+0x6db61c)
#15 0x00007f8a977b2840 __libc_start_main /build/glibc-e6zv40/glibc-2.23/csu/../csu/libc-start.c:325:0
#16 0x0000000000747519 (opt+0x747519)
Stack dump:
0. Program arguments: opt -load /home/chaitra/Desktop/iospec_test/test/build/proj/libstorage_bitcode.so -storage_bitcode
1. Running pass 'storage_bitcode' on module '<stdin>'.
Aborted (core dumped)


Thanks,
Chaitra

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201001/872534bf/attachment.html>


More information about the llvm-dev mailing list