From 1d0a9abdf3eba330e4e1a1c286050e09bfa52eeb Mon Sep 17 00:00:00 2001 From: baojingjing Date: Thu, 6 Jul 2023 09:31:02 +0800 Subject: [PATCH] [OHOS]Add PAC CFI DFI command and processing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 描述: 新增field name metadata Issue: #I7FXF4:为DFI新增field name metadata 测试: Signed-off-by: baojingjing --- clang/lib/Pac/PacDfi.cpp | 5 +++++ clang/lib/Parse/ParseExpr.cpp | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/clang/lib/Pac/PacDfi.cpp b/clang/lib/Pac/PacDfi.cpp index 4ab2b19ea069..308d734193fb 100644 --- a/clang/lib/Pac/PacDfi.cpp +++ b/clang/lib/Pac/PacDfi.cpp @@ -91,19 +91,24 @@ void PacDfiCreateMetaData(std::map> &fieldI llvm::Module &M, llvm::LLVMContext &VMContext, CodeGen::CodeGenModule *CGM) { llvm::NamedMDNode *PacNMD = M.getOrInsertNamedMetadata(mdName); + llvm::NamedMDNode *PacNMDName = M.getOrInsertNamedMetadata(mdName.str() + "name"); for (auto item : fieldInfos) { if (RecordDecl2StructName.find(item.first) == RecordDecl2StructName.end()) { continue; } std::vector PacFields; + std::vector PacFieldsName; auto styName = RecordDecl2StructName.find(item.first)->second; PacFields.push_back(llvm::MDString::get(VMContext, styName)); + PacFieldsName.push_back(llvm::MDString::get(VMContext, styName)); for (auto *Field : item.second) { + PacFieldsName.push_back(llvm::MDString::get(VMContext, Field->getName())); unsigned idx = CodeGen::getLLVMFieldNumber(*CGM, item.first, Field); PacFields.push_back(llvm::ConstantAsMetadata::get(llvm::ConstantInt::get( llvm::Type::getInt32Ty(VMContext), idx))); } PacNMD->addOperand(llvm::MDNode::get(VMContext, PacFields)); + PacNMDName->addOperand(llvm::MDNode::get(VMContext, PacFieldsName)); } } diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 1c0e0c62a3c5..2b506786df77 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -2408,8 +2408,9 @@ ExprResult Parser::ParseSYCLUniqueStableNameExpression() { ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() { assert(Tok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step, - tok::kw___builtin_omp_required_simd_align) && - "Not a sizeof/alignof/vec_step expression!"); + tok::kw___builtin_omp_required_simd_align, + tok::kw___builtin_get_modifier_bytype) && // OHOS_LOCAL + "Not a sizeof/alignof/vec_step/get_modifier_bytype expression!"); Token OpTok = Tok; ConsumeToken(); -- Gitee