Author: Alexey Bader Date: 2020-12-12T23:26:54+03:00 New Revision: a500a4358789d1794bc672421c55900ea2bbc938
URL: https://github.com/llvm/llvm-project/commit/a500a4358789d1794bc672421c55900ea2bbc938 DIFF: https://github.com/llvm/llvm-project/commit/a500a4358789d1794bc672421c55900ea2bbc938.diff LOG: [CodeGen][AMDGPU] Fix ICE for static initializer IR generation Differential Revision: https://reviews.llvm.org/D92782 Added: Modified: clang/lib/CodeGen/CGDecl.cpp clang/test/CodeGen/address-space.c Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index 478821665e45..a01638f0b67b 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -353,12 +353,11 @@ CodeGenFunction::AddInitializerToStaticVarDecl(const VarDecl &D, if (GV->getValueType() != Init->getType()) { llvm::GlobalVariable *OldGV = GV; - GV = new llvm::GlobalVariable(CGM.getModule(), Init->getType(), - OldGV->isConstant(), - OldGV->getLinkage(), Init, "", - /*InsertBefore*/ OldGV, - OldGV->getThreadLocalMode(), - CGM.getContext().getTargetAddressSpace(D.getType())); + GV = new llvm::GlobalVariable( + CGM.getModule(), Init->getType(), OldGV->isConstant(), + OldGV->getLinkage(), Init, "", + /*InsertBefore*/ OldGV, OldGV->getThreadLocalMode(), + OldGV->getType()->getPointerAddressSpace()); GV->setVisibility(OldGV->getVisibility()); GV->setDSOLocal(OldGV->isDSOLocal()); GV->setComdat(OldGV->getComdat()); diff --git a/clang/test/CodeGen/address-space.c b/clang/test/CodeGen/address-space.c index c66dfc87c0c0..baefb4b983fc 100644 --- a/clang/test/CodeGen/address-space.c +++ b/clang/test/CodeGen/address-space.c @@ -59,3 +59,14 @@ void __attribute__((address_space(1)))* void_ptr_arithmetic_test(void __attribute__((address_space(1))) *arg) { return arg + 4; } + +// CHECK-LABEL: define i32* @test5( +const unsigned *test5() { + // Intentionally leave a part of an array uninitialized. This triggers a + // diff erent code path contrary to a fully initialized array. + // CHECK: ret i32* getelementptr inbounds ([256 x i32] + static const unsigned bars[256] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; + return &bars[0]; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits