diff options
author | Vitaly Buka <vitalybuka@google.com> | 2024-09-12 11:01:01 -0700 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2024-09-12 11:01:01 -0700 |
commit | c74308f2b67c73c4989a1301d5f800eb61310fdd (patch) | |
tree | 9b3dfe001546b221ea3a95d07f7ce4eb9edc8f89 /clang/lib/AST/ByteCode/Program.cpp | |
parent | 6711e8f505bb7786ffedd564f88e46eb71690eb1 (diff) | |
parent | 885ac29910a23db923292fe3fc09d0ec105186dc (diff) | |
download | llvm-users/vitalybuka/spr/main.test.zip llvm-users/vitalybuka/spr/main.test.tar.gz llvm-users/vitalybuka/spr/main.test.tar.bz2 |
[𝘀𝗽𝗿] changes introduced through rebaseusers/vitalybuka/spr/main.test
Created using spr 1.3.4
[skip ci]
Diffstat (limited to 'clang/lib/AST/ByteCode/Program.cpp')
-rw-r--r-- | clang/lib/AST/ByteCode/Program.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp index a4f0df8..bd5860b 100644 --- a/clang/lib/AST/ByteCode/Program.cpp +++ b/clang/lib/AST/ByteCode/Program.cpp @@ -144,22 +144,33 @@ std::optional<unsigned> Program::getOrCreateGlobal(const ValueDecl *VD, return std::nullopt; } -std::optional<unsigned> Program::getOrCreateDummy(const ValueDecl *VD) { +std::optional<unsigned> Program::getOrCreateDummy(const DeclTy &D) { + assert(D); // Dedup blocks since they are immutable and pointers cannot be compared. - if (auto It = DummyVariables.find(VD); It != DummyVariables.end()) + if (auto It = DummyVariables.find(D.getOpaqueValue()); + It != DummyVariables.end()) return It->second; - QualType QT = VD->getType(); - if (const auto *RT = QT->getAs<ReferenceType>()) - QT = RT->getPointeeType(); + QualType QT; + if (const auto *E = D.dyn_cast<const Expr *>()) { + QT = E->getType(); + } else { + const ValueDecl *VD = cast<ValueDecl>(D.get<const Decl *>()); + QT = VD->getType(); + if (const auto *RT = QT->getAs<ReferenceType>()) + QT = RT->getPointeeType(); + } + assert(!QT.isNull()); Descriptor *Desc; if (std::optional<PrimType> T = Ctx.classify(QT)) - Desc = createDescriptor(VD, *T, std::nullopt, true, false); + Desc = createDescriptor(D, *T, std::nullopt, /*IsTemporary=*/true, + /*IsMutable=*/false); else - Desc = createDescriptor(VD, QT.getTypePtr(), std::nullopt, true, false); + Desc = createDescriptor(D, QT.getTypePtr(), std::nullopt, + /*IsTemporary=*/true, /*IsMutable=*/false); if (!Desc) - Desc = allocateDescriptor(VD); + Desc = allocateDescriptor(D); assert(Desc); Desc->makeDummy(); @@ -175,7 +186,7 @@ std::optional<unsigned> Program::getOrCreateDummy(const ValueDecl *VD) { G->block()->invokeCtor(); Globals.push_back(G); - DummyVariables[VD] = I; + DummyVariables[D.getOpaqueValue()] = I; return I; } |