[clang] 4ace600 - [OpaquePtr] Remove uses of CreateStructGEP() without element type
David Blaikie via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 20 12:48:52 PDT 2021
On Tue, Jul 20, 2021 at 11:52 AM Nikita Popov <nikita.ppv at gmail.com> wrote:
> On Tue, Jul 20, 2021 at 8:27 PM David Blaikie <dblaikie at gmail.com> wrote:
>
>> Any chance some of this series of patches could have test coverage
>> included? (like small clang test cases that exercise only a narrow part of
>> the codegen & works with force-opaque-pointers due to these changes?)
>>
>
> I think we're still pretty far away from any meaningful opaque pointer
> testing with clang. We need at least https://reviews.llvm.org/D103465 to
> land to support even basic cases.
>
> I just ran a quick test, and while an empty main() works under -mllvm
> -force-opaque-pointers,
>
That seems like something we could test/start things along, but yeah -
presumably that's always worked (by not having any pointers at all), so
isn't interesting.
> you get an assertion as soon as you try to dereference a pointer.
>
*nod* Just ran some tests too - having parameters (including pointer
parameters, such as "int main(int argc, char** argv) { }") work OK, but
yeah, soon as you try to access any variable (global or local), it trips up.
Thanks for the thoughts.
>
> Nikita
>
>
>> On Sat, Jul 17, 2021 at 9:48 AM Nikita Popov via cfe-commits <
>> cfe-commits at lists.llvm.org> wrote:
>>
>>>
>>> Author: Nikita Popov
>>> Date: 2021-07-17T18:48:21+02:00
>>> New Revision: 4ace6008f2fde781c1bedc7515e6380e449cb56a
>>>
>>> URL:
>>> https://github.com/llvm/llvm-project/commit/4ace6008f2fde781c1bedc7515e6380e449cb56a
>>> DIFF:
>>> https://github.com/llvm/llvm-project/commit/4ace6008f2fde781c1bedc7515e6380e449cb56a.diff
>>>
>>> LOG: [OpaquePtr] Remove uses of CreateStructGEP() without element type
>>>
>>> Remove uses of to-be-deprecated API.
>>>
>>> Added:
>>>
>>>
>>> Modified:
>>> clang/lib/CodeGen/CGBlocks.cpp
>>> clang/lib/CodeGen/CGObjCGNU.cpp
>>>
>>> Removed:
>>>
>>>
>>>
>>>
>>> ################################################################################
>>> diff --git a/clang/lib/CodeGen/CGBlocks.cpp
>>> b/clang/lib/CodeGen/CGBlocks.cpp
>>> index 769501a036e6..f39a56f81d41 100644
>>> --- a/clang/lib/CodeGen/CGBlocks.cpp
>>> +++ b/clang/lib/CodeGen/CGBlocks.cpp
>>> @@ -1375,7 +1375,7 @@ static llvm::Constant
>>> *buildGlobalBlock(CodeGenModule &CGM,
>>> llvm::IRBuilder<> b(llvm::BasicBlock::Create(CGM.getLLVMContext(),
>>> "entry",
>>> Init));
>>> b.CreateAlignedStore(CGM.getNSConcreteGlobalBlock(),
>>> - b.CreateStructGEP(literal, 0),
>>> + b.CreateStructGEP(literal->getValueType(),
>>> literal, 0),
>>> CGM.getPointerAlign().getAsAlign());
>>> b.CreateRetVoid();
>>> // We can't use the normal LLVM global initialisation array,
>>> because we
>>>
>>> diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp
>>> b/clang/lib/CodeGen/CGObjCGNU.cpp
>>> index 9e47dbf7bdf1..3f361f4e7931 100644
>>> --- a/clang/lib/CodeGen/CGObjCGNU.cpp
>>> +++ b/clang/lib/CodeGen/CGObjCGNU.cpp
>>> @@ -945,7 +945,8 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> /// Generate the name of a symbol for a reference to a class.
>>> Accesses to
>>> /// classes should be indirected via this.
>>>
>>> - typedef std::pair<std::string, std::pair<llvm::Constant*, int>>
>>> EarlyInitPair;
>>> + typedef std::pair<std::string, std::pair<llvm::GlobalVariable*, int>>
>>> + EarlyInitPair;
>>> std::vector<EarlyInitPair> EarlyInitList;
>>>
>>> std::string SymbolForClassRef(StringRef Name, bool isWeak) {
>>> @@ -1096,7 +1097,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> }
>>> }
>>> }
>>> - auto *ObjCStrGV =
>>> + llvm::GlobalVariable *ObjCStrGV =
>>> Fields.finishAndCreateGlobal(
>>> isNamed ? StringRef(StringName) : ".objc_string",
>>> Align, false, isNamed ? llvm::GlobalValue::LinkOnceODRLinkage
>>> @@ -1107,7 +1108,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> ObjCStrGV->setVisibility(llvm::GlobalValue::HiddenVisibility);
>>> }
>>> if (CGM.getTriple().isOSBinFormatCOFF()) {
>>> - std::pair<llvm::Constant*, int> v{ObjCStrGV, 0};
>>> + std::pair<llvm::GlobalVariable*, int> v{ObjCStrGV, 0};
>>> EarlyInitList.emplace_back(Sym, v);
>>> }
>>> llvm::Constant *ObjCStr = llvm::ConstantExpr::getBitCast(ObjCStrGV,
>>> IdTy);
>>> @@ -1654,9 +1655,10 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> for (const auto &lateInit : EarlyInitList) {
>>> auto *global = TheModule.getGlobalVariable(lateInit.first);
>>> if (global) {
>>> + llvm::GlobalVariable *GV = lateInit.second.first;
>>> b.CreateAlignedStore(
>>> global,
>>> - b.CreateStructGEP(lateInit.second.first,
>>> lateInit.second.second),
>>> + b.CreateStructGEP(GV->getValueType(), GV,
>>> lateInit.second.second),
>>> CGM.getPointerAlign().getAsAlign());
>>> }
>>> }
>>> @@ -1938,7 +1940,7 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> // struct objc_property_list *properties
>>> classFields.add(GeneratePropertyList(OID, classDecl));
>>>
>>> - auto *classStruct =
>>> + llvm::GlobalVariable *classStruct =
>>> classFields.finishAndCreateGlobal(SymbolForClass(className),
>>> CGM.getPointerAlign(), false,
>>> llvm::GlobalValue::ExternalLinkage);
>>>
>>> @@ -1949,12 +1951,12 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
>>> if (IsCOFF) {
>>> // we can't import a class struct.
>>> if (OID->getClassInterface()->hasAttr<DLLExportAttr>()) {
>>> -
>>> cast<llvm::GlobalValue>(classStruct)->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
>>> +
>>> classStruct->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
>>>
>>> cast<llvm::GlobalValue>(classRefSymbol)->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
>>> }
>>>
>>> if (SuperClass) {
>>> - std::pair<llvm::Constant*, int> v{classStruct, 1};
>>> + std::pair<llvm::GlobalVariable*, int> v{classStruct, 1};
>>> EarlyInitList.emplace_back(std::string(SuperClass->getName()),
>>> std::move(v));
>>> }
>>>
>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210720/c6b293af/attachment.html>
More information about the cfe-commits
mailing list