@@ -114,27 +114,6 @@ namespace clang {
114114using namespace clang ;
115115using namespace sema ;
116116
117- // / Compare two APSInts, extending and switching the sign as
118- // / necessary to compare their values regardless of underlying type.
119- static bool hasSameExtendedValue (llvm::APSInt X, llvm::APSInt Y) {
120- if (Y.getBitWidth () > X.getBitWidth ())
121- X = X.extend (Y.getBitWidth ());
122- else if (Y.getBitWidth () < X.getBitWidth ())
123- Y = Y.extend (X.getBitWidth ());
124-
125- // If there is a signedness mismatch, correct it.
126- if (X.isSigned () != Y.isSigned ()) {
127- // If the signed value is negative, then the values cannot be the same.
128- if ((Y.isSigned () && Y.isNegative ()) || (X.isSigned () && X.isNegative ()))
129- return false ;
130-
131- Y.setIsSigned (true );
132- X.setIsSigned (true );
133- }
134-
135- return X == Y;
136- }
137-
138117// / The kind of PartialOrdering we're performing template argument deduction
139118// / for (C++11 [temp.deduct.partial]).
140119enum class PartialOrderingKind { None, NonCall, Call };
@@ -273,7 +252,7 @@ checkDeducedTemplateArguments(ASTContext &Context,
273252 if (Y.getKind () == TemplateArgument::Expression ||
274253 Y.getKind () == TemplateArgument::Declaration ||
275254 (Y.getKind () == TemplateArgument::Integral &&
276- hasSameExtendedValue (X.getAsIntegral (), Y.getAsIntegral ())))
255+ llvm::APSInt::isSameValue (X.getAsIntegral (), Y.getAsIntegral ())))
277256 return X.wasDeducedFromArrayBound () ? Y : X;
278257
279258 // All other combinations are incompatible.
@@ -2574,7 +2553,7 @@ DeduceTemplateArguments(Sema &S, TemplateParameterList *TemplateParams,
25742553
25752554 case TemplateArgument::Integral:
25762555 if (A.getKind () == TemplateArgument::Integral) {
2577- if (hasSameExtendedValue (P.getAsIntegral (), A.getAsIntegral ()))
2556+ if (llvm::APSInt::isSameValue (P.getAsIntegral (), A.getAsIntegral ()))
25782557 return TemplateDeductionResult::Success;
25792558 }
25802559 Info.FirstArg = P;
@@ -2828,44 +2807,6 @@ TemplateDeductionResult Sema::DeduceTemplateArguments(
28282807 /* HasDeducedAnyParam=*/ nullptr );
28292808}
28302809
2831- // / Determine whether two template arguments are the same.
2832- static bool isSameTemplateArg (ASTContext &Context, const TemplateArgument &X,
2833- const TemplateArgument &Y) {
2834- if (X.getKind () != Y.getKind ())
2835- return false ;
2836-
2837- switch (X.getKind ()) {
2838- case TemplateArgument::Null:
2839- llvm_unreachable (" Comparing NULL template argument" );
2840-
2841- case TemplateArgument::Type:
2842- case TemplateArgument::Declaration:
2843- case TemplateArgument::NullPtr:
2844- case TemplateArgument::Template:
2845- case TemplateArgument::TemplateExpansion:
2846- case TemplateArgument::StructuralValue:
2847- case TemplateArgument::Expression:
2848- return Context.isSameTemplateArgument (X, Y);
2849-
2850- case TemplateArgument::Integral:
2851- return hasSameExtendedValue (X.getAsIntegral (), Y.getAsIntegral ());
2852-
2853- case TemplateArgument::Pack: {
2854- unsigned PackIterationSize = X.pack_size ();
2855- if (X.pack_size () != Y.pack_size ())
2856- return false ;
2857- ArrayRef<TemplateArgument> XP = X.pack_elements ();
2858- ArrayRef<TemplateArgument> YP = Y.pack_elements ();
2859- for (unsigned i = 0 ; i < PackIterationSize; ++i)
2860- if (!isSameTemplateArg (Context, XP[i], YP[i]))
2861- return false ;
2862- return true ;
2863- }
2864- }
2865-
2866- llvm_unreachable (" Invalid TemplateArgument Kind!" );
2867- }
2868-
28692810TemplateArgumentLoc
28702811Sema::getTrivialTemplateArgumentLoc (const TemplateArgument &Arg,
28712812 QualType NTTPType, SourceLocation Loc,
@@ -3331,7 +3272,7 @@ static TemplateDeductionResult FinishTemplateArgumentDeduction(
33313272 break ;
33323273 TemplateArgument PP = P.isPackExpansion () ? P.getPackExpansionPattern () : P,
33333274 PA = A.isPackExpansion () ? A.getPackExpansionPattern () : A;
3334- if (!isSameTemplateArg ( S.Context , PP, PA)) {
3275+ if (!S.Context . isSameTemplateArgument ( PP, PA)) {
33353276 if (!P.isPackExpansion () && !A.isPackExpansion ()) {
33363277 Info.Param = makeTemplateParameter (TPL->getParam (
33373278 (AsStack.empty () ? As.end () : AsStack.back ().begin ()) -
0 commit comments