diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index c5de4d0dfd0822b898a3c73e4f8b5f728c941519..0cde1660956b09cad719f48ad6144df79088136a 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 bf8e53887c0ff90cbe5ecd45cccf2c161b20cdff..3879a92d26b2c794458492e7184401ffe49c75bf 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 f6c04c9871dddcc5556f8aeb7f7c41e3fb390287..57e935840415cd4ad7f651260a6116275c16cadf 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 e2d96c3419a64dfd76855c7a363e1ad2e3877304..431b5530c9568660ac6d822a0a57806fe1e9a1dd 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 84d054c461ebdebc37e343e85ef1aefd9fece7cd..a06deffd8cdef907a2d4856b84629aa36b6819d9 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 b5bdca86cf77f784ce68774f0efed783d6cf123b..b2f835d023d1030b7ca0aa28bca3c2c1be9a0164 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 98f46321943a1c76deff6a49974839c5060dc265..5950b73f9cc3f750f8b6cdc8e7f3885bea77e768 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 2341e2c7a36d907b4e8e55eaff751b81592f52da..37c9aa6d04f207d0f0aea2736996f1fe7d90f485 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 a891ec4fe92861faf08fffdf9e45c6cb6acbf46c..74235fbe195d92f592b07ff77410b88a10fbf6e0 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 35e289bd2da384ce7860d2a6fa21da57bfa7a028..83a389d2fd0a0219f3c35c5c723d2d96f91cf546 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 4456e66bcd1421cfbacab8b655f0a5c5455be973..fb202564321a816542574701f0b4da695a66dbfb 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 36f4f1a3412d6925ad3eddc4426ec9d31748304b..07fad7ff868512651b4e5637b54889c20dca7d5e 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 2c048a1369bf121924104c6f151a6bd66791499f..2b321712f9200e5c2685d2c5b874d12b2ed69d3d 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 2533f382ed82f8dd0ff6605af7a33791ef51db2a..76c9c2c70c7fcfdc1c4f6066d63f84f5451ba69f 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 2344ac2aeb6d27ba10bf4a117a8750c9c32f29f4..8543fb21c3b78b5a1a3091d70ccac597b5a4c4b3 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 3f85d0c19a069de5fd9703daa2556c52752d900f..194c61c8c0bdc200912bad72232fdbff872389fc 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 56bd1735b3e0b4255a82d2dde72e07473d9670e6..8f16a7ce7c1dda4350aa25240c301e28bd23e246 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 d28ff01796be840702a47b3f19c76a4f70aef9d1..371525e87278c2a4ff70a4b3656c643cde4d2959 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;