From 48e15443f837451e85d3b33648bfd14128d69c28 Mon Sep 17 00:00:00 2001 From: z30060698 Date: Tue, 21 Jan 2025 16:51:57 +0800 Subject: [PATCH] [Typeslab] Supplementary Notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 描述: 增加OHOS_LOCAL的注释,修改不合理的打印信息。 Issue:#IBIX8V: 【Typeslab】The builtin function can be used to obtain the signature and digest of a structure. 测试: Signed-off-by: zhangjing --- clang/include/clang/AST/Expr.h | 1 + clang/include/clang/Basic/TokenKinds.def | 4 +++- clang/include/clang/Sema/Sema.h | 1 + clang/include/clang/Serialization/ASTBitCodes.h | 2 +- clang/lib/AST/Expr.cpp | 2 +- clang/lib/AST/ExprClassification.cpp | 2 +- clang/lib/AST/ExprConstant.cpp | 8 +++++--- clang/lib/AST/ItaniumMangle.cpp | 2 +- clang/lib/AST/StmtPrinter.cpp | 1 + clang/lib/AST/StmtProfile.cpp | 1 + clang/lib/CodeGen/CGExprScalar.cpp | 1 + clang/lib/Parse/ParseExpr.cpp | 8 +++++--- clang/lib/Sema/SemaExceptionSpec.cpp | 2 +- clang/lib/Sema/SemaExpr.cpp | 2 +- clang/lib/Sema/TreeTransform.h | 1 + clang/lib/Serialization/ASTReaderStmt.cpp | 2 ++ clang/lib/StaticAnalyzer/Core/ExprEngine.cpp | 2 +- clang/tools/libclang/CXCursor.cpp | 2 +- 18 files changed, 29 insertions(+), 15 deletions(-) diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index c5de4d0dfd08..0cde1660956b 100644 --- a/clang/include/clang/AST/Expr.h +++ b/clang/include/clang/AST/Expr.h @@ -6465,6 +6465,7 @@ private: // OHOS_LOCAL begin // This represents a use of the __builtin_hm_type_signature, which input a // Struct. +// HM stands for " Harmony". This class is developed for HarmonyOS. class HMTypeSigExpr final : public Expr { SourceLocation OpLoc, RParenLoc; QualType DataType; diff --git a/clang/include/clang/Basic/TokenKinds.def b/clang/include/clang/Basic/TokenKinds.def index bf8e53887c0f..3879a92d26b2 100644 --- a/clang/include/clang/Basic/TokenKinds.def +++ b/clang/include/clang/Basic/TokenKinds.def @@ -434,10 +434,12 @@ KEYWORD(__builtin_LINE , KEYALL) KEYWORD(__builtin_COLUMN , KEYALL) KEYWORD(__builtin_source_location , KEYCXX) +// OHOS_LOCAL begin UNARY_EXPR_OR_TYPE_TRAIT(__builtin_get_modifier_bytype, PacModifierByType, - KEYALL) // OHOS_LOCAL + KEYALL) UNARY_EXPR_OR_TYPE_TRAIT(__builtin_hm_type_summary, HMTypeSummary, KEYALL) UNARY_EXPR_OR_TYPE_TRAIT(__builtin_hm_type_signature, HMTypeSignature, KEYALL) +// OHOS_LOCAL end // __builtin_types_compatible_p is a GNU C extension that we handle like a C++ // type trait. diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h index f6c04c9871dd..57e935840415 100644 --- a/clang/include/clang/Sema/Sema.h +++ b/clang/include/clang/Sema/Sema.h @@ -5854,6 +5854,7 @@ public: bool CheckCaseExpression(Expr *E); + // OHOS_LOCAL // __builtin_hm_type_signature(type) ExprResult ActOnHMTypeSig(SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind, diff --git a/clang/include/clang/Serialization/ASTBitCodes.h b/clang/include/clang/Serialization/ASTBitCodes.h index e2d96c3419a6..431b5530c956 100644 --- a/clang/include/clang/Serialization/ASTBitCodes.h +++ b/clang/include/clang/Serialization/ASTBitCodes.h @@ -1888,7 +1888,7 @@ enum StmtCode { EXPR_CXX_FOLD, // CXXFoldExpr EXPR_CONCEPT_SPECIALIZATION, // ConceptSpecializationExpr EXPR_REQUIRES, // RequiresExpr - EXPR_HM_TYPE_SIG, // A HMTypeSigExpr record. + EXPR_HM_TYPE_SIG, // A HMTypeSigExpr record. OHOS_LOCAL // CUDA EXPR_CUDA_KERNEL_CALL, // CUDAKernelCallExpr diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 84d054c461eb..a06deffd8cde 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -5073,7 +5073,7 @@ void HMTypeSigExpr::divideGranulesRecord( RecordDecl *RD = CurType->getDecl(); if (!RD->getDefinition()) { llvm::errs() << RD->getNameAsString() - << "not defination cannot get signature.\n"; + << "Only definitions can get signature.\n"; return; } if (RD->isUnion()) { diff --git a/clang/lib/AST/ExprClassification.cpp b/clang/lib/AST/ExprClassification.cpp index b5bdca86cf77..b2f835d023d1 100644 --- a/clang/lib/AST/ExprClassification.cpp +++ b/clang/lib/AST/ExprClassification.cpp @@ -203,7 +203,7 @@ static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) { case Expr::SourceLocExprClass: case Expr::ConceptSpecializationExprClass: case Expr::RequiresExprClass: - case Expr::HMTypeSigExprClass: + case Expr::HMTypeSigExprClass: // OHOS_LOCAL return Cl::CL_PRValue; case Expr::ConstantExprClass: diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 98f46321943a..5950b73f9cc3 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -8797,6 +8797,7 @@ public: return true; } + // OHOS_LOCAL bool VisitHMTypeSigExpr(const HMTypeSigExpr *E) { if (E->getKind() != UETT_HMTypeSignature) return false; @@ -10995,7 +10996,7 @@ public: bool VisitCastExpr(const CastExpr* E); bool VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *E); - bool VisitHMTypeSigExpr(const HMTypeSigExpr *E); + bool VisitHMTypeSigExpr(const HMTypeSigExpr *E); // OHOS_LOCAL bool VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) { return Success(E->getValue(), E); @@ -13315,7 +13316,8 @@ bool IntExprEvaluator::VisitUnaryExprOrTypeTraitExpr( llvm_unreachable("unknown expr/type trait"); } - + +// OHOS_LOCAL bool IntExprEvaluator::VisitHMTypeSigExpr(const HMTypeSigExpr *E) { if (E->getKind() != UETT_HMTypeSummary) { return false; @@ -15498,7 +15500,7 @@ static ICEDiag CheckICE(const Expr* E, const ASTContext &Ctx) { case Expr::ArrayTypeTraitExprClass: case Expr::ExpressionTraitExprClass: case Expr::CXXNoexceptExprClass: - case Expr::HMTypeSigExprClass: + case Expr::HMTypeSigExprClass: // OHOS_LOCAL return NoDiag(); case Expr::CallExprClass: case Expr::CXXOperatorCallExprClass: { diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 2341e2c7a36d..37c9aa6d04f2 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -4289,7 +4289,7 @@ recurse: case Expr::AtomicExprClass: case Expr::SourceLocExprClass: case Expr::BuiltinBitCastExprClass: - case Expr::HMTypeSigExprClass: + case Expr::HMTypeSigExprClass: // OHOS_LOCAL { NotPrimaryExpr(); if (!NullOut) { diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index a891ec4fe928..74235fbe195d 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -2716,6 +2716,7 @@ void StmtPrinter::VisitAsTypeExpr(AsTypeExpr *Node) { OS << ")"; } +// OHOS_LOCAL void StmtPrinter::VisitHMTypeSigExpr(HMTypeSigExpr *Node) { OS << Node->getBuiltinStr() << "()"; } diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp index 35e289bd2da3..83a389d2fd0a 100644 --- a/clang/lib/AST/StmtProfile.cpp +++ b/clang/lib/AST/StmtProfile.cpp @@ -2215,6 +2215,7 @@ void StmtProfiler::VisitSourceLocExpr(const SourceLocExpr *E) { void StmtProfiler::VisitRecoveryExpr(const RecoveryExpr *E) { VisitExpr(E); } +// OHOS_LOCAL void StmtProfiler::VisitHMTypeSigExpr(const HMTypeSigExpr *E) { VisitExpr(E); } diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 4456e66bcd14..fb202564321a 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -646,6 +646,7 @@ public: return ConstantEmitter(CGF).emitAbstract(SLE->getLocation(), Evaluated, SLE->getType()); } + // OHOS_LOCAL Value *VisitHMTypeSigExpr(HMTypeSigExpr *SLE) { auto &Ctx = CGF.getContext(); APValue Evaluated = SLE->EvaluateTypeSig(Ctx); diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 36f4f1a3412d..07fad7ff8685 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -1422,9 +1422,11 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind, case tok::kw_vec_step: // unary-expression: OpenCL 'vec_step' expression // unary-expression: '__builtin_omp_required_simd_align' '(' type-name ')' case tok::kw___builtin_omp_required_simd_align: - case tok::kw___builtin_get_modifier_bytype: // OHOS_LOCAL + // OHOS_LOCAL begin + case tok::kw___builtin_get_modifier_bytype: case tok::kw___builtin_hm_type_summary: case tok::kw___builtin_hm_type_signature: + // OHOS_LOCAL end if (NotPrimaryExpression) *NotPrimaryExpression = true; AllowSuffix = false; @@ -2288,7 +2290,7 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok, assert(OpTok.isOneOf(tok::kw_typeof, tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step, tok::kw___builtin_omp_required_simd_align, - tok::kw___builtin_get_modifier_bytype, + tok::kw___builtin_get_modifier_bytype, // OHOS_LOCAL tok::kw___builtin_hm_type_summary, tok::kw___builtin_hm_type_signature) && "Not a typeof/sizeof/alignof/vec_step expression!"); @@ -2493,11 +2495,11 @@ ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() { // OHOS_LOCAL Begin else if (OpTok.is(tok::kw___builtin_get_modifier_bytype)) ExprKind = UETT_PacModifierByType; - // OHOS_LOCAL End else if (OpTok.is(tok::kw___builtin_hm_type_summary)) ExprKind = UETT_HMTypeSummary; else if (OpTok.is(tok::kw___builtin_hm_type_signature)) ExprKind = UETT_HMTypeSignature; + // OHOS_LOCAL End if (isCastExpr && (OpTok.is(tok::kw___builtin_hm_type_summary) || OpTok.is(tok::kw___builtin_hm_type_signature))) { diff --git a/clang/lib/Sema/SemaExceptionSpec.cpp b/clang/lib/Sema/SemaExceptionSpec.cpp index 2c048a1369bf..2b321712f920 100644 --- a/clang/lib/Sema/SemaExceptionSpec.cpp +++ b/clang/lib/Sema/SemaExceptionSpec.cpp @@ -1404,7 +1404,7 @@ CanThrowResult Sema::canThrow(const Stmt *S) { case Expr::SourceLocExprClass: case Expr::ConceptSpecializationExprClass: case Expr::RequiresExprClass: - case Expr::HMTypeSigExprClass: + case Expr::HMTypeSigExprClass: // OHOS_LOCAL // These expressions can never throw. return CT_Cannot; diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 2533f382ed82..76c9c2c70c7f 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -20814,7 +20814,7 @@ ExprResult Sema::CreateRecoveryExpr(SourceLocation Begin, SourceLocation End, return RecoveryExpr::Create(Context, T, Begin, End, SubExprs); } -// __builtin_hm_type_signature +// OHOS_LOCAL ExprResult Sema::ActOnHMTypeSig(SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind, ParsedType ParsedTy, SourceRange ArgRange) { diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 2344ac2aeb6d..8543fb21c3b7 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -11770,6 +11770,7 @@ ExprResult TreeTransform::TransformSourceLocExpr(SourceLocExpr *E) { getSema().CurContext); } +// OHOS_LOCAL template ExprResult TreeTransform::TransformHMTypeSigExpr(HMTypeSigExpr *E) { return E; diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index 3f85d0c19a06..194c61c8c0bd 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -2191,6 +2191,7 @@ void ASTStmtReader::VisitRecoveryExpr(RecoveryExpr *E) { Child = Record.readSubStmt(); } +// OHOS_LOCAL void ASTStmtReader::VisitHMTypeSigExpr(HMTypeSigExpr *E) { VisitExpr(E); E->setOperatorLoc(readSourceLocation()); @@ -4018,6 +4019,7 @@ Stmt *ASTReader::ReadStmtFromStream(ModuleFile &F) { break; } + // OHOS_LOCAL case EXPR_HM_TYPE_SIG: S = new (Context) HMTypeSigExpr(Empty); break; diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp index 56bd1735b3e0..8f16a7ce7c1d 100644 --- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp +++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp @@ -1606,7 +1606,7 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred, case Stmt::OMPArrayShapingExprClass: case Stmt::OMPIteratorExprClass: case Stmt::SYCLUniqueStableNameExprClass: - case Stmt::HMTypeSigExprClass: + case Stmt::HMTypeSigExprClass: // OHOS_LOCAL case Stmt::TypeTraitExprClass: { Bldr.takeNodes(Pred); ExplodedNodeSet preVisit; diff --git a/clang/tools/libclang/CXCursor.cpp b/clang/tools/libclang/CXCursor.cpp index d28ff01796be..371525e87278 100644 --- a/clang/tools/libclang/CXCursor.cpp +++ b/clang/tools/libclang/CXCursor.cpp @@ -335,7 +335,7 @@ CXCursor cxcursor::MakeCXCursor(const Stmt *S, const Decl *Parent, case Stmt::ObjCSubscriptRefExprClass: case Stmt::RecoveryExprClass: case Stmt::SYCLUniqueStableNameExprClass: - case Stmt::HMTypeSigExprClass: + case Stmt::HMTypeSigExprClass: // OHOS_LOCAL K = CXCursor_UnexposedExpr; break; -- Gitee