Lines Matching +full:csi +full:- +full:no +full:- +full:ss

1 //===------- SemaTemplateVariadic.cpp - C++ Variadic Templates ------------===/
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //===----------------------------------------------------------------------===/
9 //===----------------------------------------------------------------------===/
25 //----------------------------------------------------------------------------
27 //----------------------------------------------------------------------------
40 unsigned DepthLimit = (unsigned)-1;
47 auto *FD = dyn_cast<FunctionDecl>(VD->getDeclContext()); in addUnexpanded()
48 auto *FTD = FD ? FD->getDescribedFunctionTemplate() : nullptr; in addUnexpanded()
49 if (FTD && FTD->getTemplateParameters()->getDepth() >= DepthLimit) in addUnexpanded()
58 if (T->getDepth() < DepthLimit) in addUnexpanded()
72 //------------------------------------------------------------------------
74 //------------------------------------------------------------------------
78 if (TL.getTypePtr()->isParameterPack()) in VisitTemplateTypeParmTypeLoc()
84 /// when we don't have proper source-location information for
89 if (T->isParameterPack()) in VisitTemplateTypeParmType()
95 /// Record occurrences of function and non-type template
98 if (E->getDecl()->isParameterPack()) in VisitDeclRefExpr()
99 addUnexpanded(E->getDecl(), E->getLocation()); in VisitDeclRefExpr()
108 if (TTP->isParameterPack()) in TraverseTemplateName()
115 /// Suppress traversal into Objective-C container literal
118 if (!E->containsUnexpandedParameterPack()) in TraverseObjCDictionaryLiteral()
121 for (unsigned I = 0, N = E->getNumElements(); I != N; ++I) { in TraverseObjCDictionaryLiteral()
122 ObjCDictionaryElement Element = E->getKeyValueElement(I); in TraverseObjCDictionaryLiteral()
131 //------------------------------------------------------------------------
133 //------------------------------------------------------------------------
139 if ((E && E->containsUnexpandedParameterPack()) || InLambda) in TraverseStmt()
148 if ((!T.isNull() && T->containsUnexpandedParameterPack()) || InLambda) in TraverseType()
158 TL.getType()->containsUnexpandedParameterPack()) || in TraverseTypeLoc()
170 if (D && D->isParameterPack()) in TraverseDecl()
176 /// Suppress traversal of pack-expanded attributes.
178 if (A->isPackExpansion()) in TraverseAttr()
191 return inherited::TraverseStmt(E->getIndexExpr()); in TraversePackIndexingExpr()
194 return inherited::TraverseStmt(E->getIndexExpr()); in TraversePackIndexingType()
202 /// Suppress traversal of using-declaration pack expansion.
204 if (D->isPackExpansion()) in TraverseUnresolvedUsingValueDecl()
210 /// Suppress traversal of using-declaration pack expansion.
212 if (D->isPackExpansion()) in TraverseUnresolvedUsingTypenameDecl()
242 /// Suppress traversal of mem-initializer pack expansions.
244 if (Init->isPackExpansion()) in TraverseConstructorInitializer()
258 if (!Lambda->containsUnexpandedParameterPack()) in TraverseLambdaExpr()
265 if (auto *TPL = Lambda->getTemplateParameterList()) in TraverseLambdaExpr()
266 DepthLimit = TPL->getDepth(); in TraverseLambdaExpr()
278 if (C->isPackExpansion()) in TraverseLambdaCapture()
289 /// lambda-expression within a function call.
320 return TTPD && TTPD->getTypeForDecl() == TTPT; in DiagnoseUnexpandedParameterPacks()
324 if (llvm::any_of(LSI->LocalPacks, DeclaresThisPack)) in DiagnoseUnexpandedParameterPacks()
341 for (unsigned N = FunctionScopes.size(); N; --N) { in DiagnoseUnexpandedParameterPacks()
342 sema::FunctionScopeInfo *Func = FunctionScopes[N-1]; in DiagnoseUnexpandedParameterPacks()
344 Func->CompoundScopes, in DiagnoseUnexpandedParameterPacks()
345 [](sema::CompoundScopeInfo &CSI) { return CSI.IsStmtExpr; })) { in DiagnoseUnexpandedParameterPacks() argument
349 // Coumpound-statements outside the lambda are OK for now; we'll check in DiagnoseUnexpandedParameterPacks()
356 LSI->ContainsUnexpandedParameterPack = true; in DiagnoseUnexpandedParameterPacks()
372 Name = TTP->getIdentifier(); in DiagnoseUnexpandedParameterPacks()
374 Name = Unexpanded[I].first.get<NamedDecl *>()->getIdentifier(); in DiagnoseUnexpandedParameterPacks()
398 // ill-formed. in DiagnoseUnexpandedParameterPack()
399 if (!T->getType()->containsUnexpandedParameterPack()) in DiagnoseUnexpandedParameterPack()
404 T->getTypeLoc()); in DiagnoseUnexpandedParameterPack()
413 // ill-formed. in DiagnoseUnexpandedParameterPack()
414 if (!E->containsUnexpandedParameterPack()) in DiagnoseUnexpandedParameterPack()
427 return DiagnoseUnexpandedParameterPacks(E->getBeginLoc(), UPPC, Unexpanded); in DiagnoseUnexpandedParameterPack()
431 if (!RE->containsUnexpandedParameterPack()) in DiagnoseUnexpandedParameterPackInRequiresExpr()
440 auto Parms = RE->getLocalParameters(); in DiagnoseUnexpandedParameterPackInRequiresExpr()
449 return DiagnoseUnexpandedParameterPacks(RE->getBeginLoc(), UPPC_Requirement, in DiagnoseUnexpandedParameterPackInRequiresExpr()
453 bool Sema::DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS, in DiagnoseUnexpandedParameterPack() argument
457 // ill-formed. in DiagnoseUnexpandedParameterPack()
458 if (!SS.getScopeRep() || in DiagnoseUnexpandedParameterPack()
459 !SS.getScopeRep()->containsUnexpandedParameterPack()) in DiagnoseUnexpandedParameterPack()
464 .TraverseNestedNameSpecifier(SS.getScopeRep()); in DiagnoseUnexpandedParameterPack()
466 return DiagnoseUnexpandedParameterPacks(SS.getRange().getBegin(), in DiagnoseUnexpandedParameterPack()
474 // ill-formed. in DiagnoseUnexpandedParameterPack()
493 if (!NameInfo.getName().getCXXNameType()->containsUnexpandedParameterPack()) in DiagnoseUnexpandedParameterPack()
626 return CreateParsedType(TSResult->getType(), TSResult); in ActOnPackExpansion()
632 // Create the pack expansion type and source-location information. in CheckPackExpansion()
633 QualType Result = CheckPackExpansion(Pattern->getType(), in CheckPackExpansion()
634 Pattern->getTypeLoc().getSourceRange(), in CheckPackExpansion()
640 TLB.pushFullCopy(Pattern->getTypeLoc()); in CheckPackExpansion()
656 // the desugaring of an init-capture pack. in CheckPackExpansion()
657 if (!Pattern->containsUnexpandedParameterPack() && in CheckPackExpansion()
658 !Pattern->getContainedDeducedType()) { in CheckPackExpansion()
681 if (!Pattern->containsUnexpandedParameterPack()) { in CheckPackExpansion()
683 << Pattern->getSourceRange(); in CheckPackExpansion()
688 // Create the pack expansion expression and source-location information. in CheckPackExpansion()
713 Depth = TTP->getDepth(); in CheckParameterPacksForExpansion()
714 Index = TTP->getIndex(); in CheckParameterPacksForExpansion()
715 Name = TTP->getIdentifier(); in CheckParameterPacksForExpansion()
723 Name = ND->getIdentifier(); in CheckParameterPacksForExpansion()
733 CurrentInstantiationScope->findInstantiationOf( in CheckParameterPacksForExpansion()
735 if (Instantiation->is<DeclArgumentPack *>()) { in CheckParameterPacksForExpansion()
737 NewPackSize = Instantiation->get<DeclArgumentPack *>()->size(); in CheckParameterPacksForExpansion()
764 CurrentInstantiationScope->getPartiallySubstitutedPack()) { in CheckParameterPacksForExpansion()
815 CurrentInstantiationScope->getPartiallySubstitutedPack(); in CheckParameterPacksForExpansion()
830 QualType Pattern = cast<PackExpansionType>(T)->getPattern(); in getNumArgumentsInExpansion()
842 Depth = TTP->getDepth(); in getNumArgumentsInExpansion()
843 Index = TTP->getIndex(); in getNumArgumentsInExpansion()
847 // Function parameter pack or init-capture pack. in getNumArgumentsInExpansion()
851 CurrentInstantiationScope->findInstantiationOf( in getNumArgumentsInExpansion()
853 if (Instantiation->is<Decl *>()) in getNumArgumentsInExpansion()
858 unsigned Size = Instantiation->get<DeclArgumentPack *>()->size(); in getNumArgumentsInExpansion()
892 if (!T.isNull() && T->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
902 DS.getRepAsExpr()->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
956 Chunk.Arr.NumElts->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
962 QualType ParamTy = Param->getType(); in containsUnexpandedParameterPacks()
964 if (ParamTy->containsUnexpandedParameterPack()) return true; in containsUnexpandedParameterPacks()
971 ->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
975 Chunk.Fun.NoexceptExpr->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
980 if (!T.isNull() && T->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
987 Chunk.Mem.Scope().getScopeRep()->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
994 if (TRC->containsUnexpandedParameterPack()) in containsUnexpandedParameterPacks()
1007 return ND && ND->isParameterPack(); in ValidateCandidate()
1055 if (!ParameterPack || !ParameterPack->isParameterPack()) { in ActOnSizeofParameterPackExpr()
1068 ValueDecl *VD = D->getDecl(); in isParameterPack()
1069 return VD->isParameterPack(); in isParameterPack()
1081 if (!PackExpression->containsErrors()) { in ActOnPackIndexingExpr()
1083 Diag(PackExpression->getBeginLoc(), diag::err_expected_name_of_pack) in ActOnPackIndexingExpr()
1091 Diag(Res.get()->getBeginLoc(), getLangOpts().CPlusPlus26 in ActOnPackIndexingExpr()
1103 if (!IndexExpr->isInstantiationDependent()) { in BuildPackIndexingExpr()
1116 Diag(PackExpression->getBeginLoc(), diag::err_pack_index_out_of_bound) in BuildPackIndexingExpr()
1135 // type-source info! in getTemplateArgumentPackExpansionPattern()
1141 ExpansionTSInfo->getTypeLoc().castAs<PackExpansionTypeLoc>(); in getTemplateArgumentPackExpansionPattern()
1145 NumExpansions = Expansion.getTypePtr()->getNumExpansions(); in getTemplateArgumentPackExpansionPattern()
1161 Expr *Pattern = Expansion->getPattern(); in getTemplateArgumentPackExpansionPattern()
1162 Ellipsis = Expansion->getEllipsisLoc(); in getTemplateArgumentPackExpansionPattern()
1163 NumExpansions = Expansion->getNumExpansions(); in getTemplateArgumentPackExpansionPattern()
1198 if (auto *Subst = Arg.getAsType()->getAs<SubstTemplateTypeParmPackType>()) in getFullyPackExpandedSize()
1199 Pack = Subst->getArgumentPack(); in getFullyPackExpandedSize()
1207 Pack = Subst->getArgumentPack(); in getFullyPackExpandedSize()
1210 if (PD->isParameterPack()) in getFullyPackExpandedSize()
1212 return Subst->getNumExpansions(); in getFullyPackExpandedSize()
1220 Pack = Subst->getArgumentPack(); in getFullyPackExpandedSize()
1235 // Check that no argument in the pack is itself a pack expansion. in getFullyPackExpandedSize()
1237 // There's no point recursing in this case; we would have already in getFullyPackExpandedSize()
1260 E = E->IgnoreImpCasts(); in CheckFoldOperand()
1262 if ((OCE && OCE->isInfixBinaryOp()) || isa<BinaryOperator>(E) || in CheckFoldOperand()
1264 S.Diag(E->getExprLoc(), diag::err_fold_expression_bad_operand) in CheckFoldOperand()
1265 << E->getSourceRange() in CheckFoldOperand()
1266 << FixItHint::CreateInsertion(E->getBeginLoc(), "(") in CheckFoldOperand()
1267 << FixItHint::CreateInsertion(E->getEndLoc(), ")"); in CheckFoldOperand()
1275 // LHS and RHS must be cast-expressions. We allow an arbitrary expression in ActOnCXXFoldExpr()
1276 // in the parser and reduce down to just cast-expressions here. in ActOnCXXFoldExpr()
1286 // In a binary fold, op1 and op2 shall be the same fold-operator, and in ActOnCXXFoldExpr()
1290 LHS->containsUnexpandedParameterPack() == in ActOnCXXFoldExpr()
1291 RHS->containsUnexpandedParameterPack()) { in ActOnCXXFoldExpr()
1294 LHS->containsUnexpandedParameterPack() in ActOnCXXFoldExpr()
1297 << LHS->getSourceRange() << RHS->getSourceRange(); in ActOnCXXFoldExpr()
1301 // In a unary fold, the cast-expression shall contain an unexpanded in ActOnCXXFoldExpr()
1306 if (!Pack->containsUnexpandedParameterPack()) { in ActOnCXXFoldExpr()
1309 << Pack->getSourceRange(); in ActOnCXXFoldExpr()
1315 // Perform first-phase name lookup now. in ActOnCXXFoldExpr()
1350 // If N is zero for a unary fold-expression, the value of the expression is in BuildEmptyCXXFoldExpr()
1351 // && -> true in BuildEmptyCXXFoldExpr()
1352 // || -> false in BuildEmptyCXXFoldExpr()
1353 // , -> void() in BuildEmptyCXXFoldExpr()
1354 // if the operator is not listed [above], the instantiation is ill-formed. in BuildEmptyCXXFoldExpr()