diff options
Diffstat (limited to 'clang/lib/AST/ByteCode/Program.cpp')
-rw-r--r-- | clang/lib/AST/ByteCode/Program.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/clang/lib/AST/ByteCode/Program.cpp b/clang/lib/AST/ByteCode/Program.cpp index 2d9ed58..8b0b07f 100644 --- a/clang/lib/AST/ByteCode/Program.cpp +++ b/clang/lib/AST/ByteCode/Program.cpp @@ -243,12 +243,13 @@ std::optional<unsigned> Program::createGlobal(const DeclTy &D, QualType Ty, Descriptor *Desc; const bool IsConst = Ty.isConstQualified(); const bool IsTemporary = D.dyn_cast<const Expr *>(); + const bool IsVolatile = Ty.isVolatileQualified(); if (std::optional<PrimType> T = Ctx.classify(Ty)) Desc = createDescriptor(D, *T, nullptr, Descriptor::GlobalMD, IsConst, - IsTemporary); + IsTemporary, /*IsMutable=*/false, IsVolatile); else Desc = createDescriptor(D, Ty.getTypePtr(), Descriptor::GlobalMD, IsConst, - IsTemporary); + IsTemporary, /*IsMutable=*/false, IsVolatile); if (!Desc) return std::nullopt; @@ -304,7 +305,7 @@ Record *Program::getOrCreateRecord(const RecordDecl *RD) { return nullptr; return allocateDescriptor(BD, BR, std::nullopt, /*isConst=*/false, /*isTemporary=*/false, - /*isMutable=*/false); + /*isMutable=*/false, /*IsVolatile=*/false); }; // Reserve space for base classes. @@ -364,13 +365,14 @@ Record *Program::getOrCreateRecord(const RecordDecl *RD) { QualType FT = FD->getType(); const bool IsConst = FT.isConstQualified(); const bool IsMutable = FD->isMutable(); + const bool IsVolatile = FT.isVolatileQualified(); const Descriptor *Desc; if (std::optional<PrimType> T = Ctx.classify(FT)) { Desc = createDescriptor(FD, *T, nullptr, std::nullopt, IsConst, - /*isTemporary=*/false, IsMutable); + /*isTemporary=*/false, IsMutable, IsVolatile); } else { Desc = createDescriptor(FD, FT.getTypePtr(), std::nullopt, IsConst, - /*isTemporary=*/false, IsMutable); + /*isTemporary=*/false, IsMutable, IsVolatile); } if (!Desc) return nullptr; @@ -387,13 +389,14 @@ Record *Program::getOrCreateRecord(const RecordDecl *RD) { Descriptor *Program::createDescriptor(const DeclTy &D, const Type *Ty, Descriptor::MetadataSize MDSize, bool IsConst, bool IsTemporary, - bool IsMutable, const Expr *Init) { + bool IsMutable, bool IsVolatile, + const Expr *Init) { // Classes and structures. if (const auto *RT = Ty->getAs<RecordType>()) { if (const auto *Record = getOrCreateRecord(RT->getDecl())) return allocateDescriptor(D, Record, MDSize, IsConst, IsTemporary, - IsMutable); + IsMutable, IsVolatile); return allocateDescriptor(D, MDSize); } |