Deleted Added
full compact
1001,1004d1000
< unsigned ParamWidth = 128; // Safe default
< if (FromDefaultNonTypeDecl->getType()->isIntegralOrEnumerationType())
< ParamWidth = Context.getIntWidth(FromDefaultNonTypeDecl->getType());
<
1010c1006,1007
< HasFromInt = GetInt(Context, FromIter, FromExpr, FromInt);
---
> HasFromInt = GetInt(Context, FromIter, FromExpr, FromInt,
> FromDefaultNonTypeDecl->getType());
1012c1009,1010
< HasToInt = GetInt(Context, ToIter, ToExpr, ToInt);
---
> HasToInt = GetInt(Context, ToIter, ToExpr, ToInt,
> ToDefaultNonTypeDecl->getType());
1016c1014
< Tree.SetSame(IsSameConvertedInt(ParamWidth, FromInt, ToInt));
---
> Tree.SetSame(FromInt == ToInt);
1023c1021
< Tree.SetSame(IsEqualExpr(Context, ParamWidth, FromExpr, ToExpr) ||
---
> Tree.SetSame(IsEqualExpr(Context, FromExpr, ToExpr) ||
1033c1031,1032
< HasFromInt = GetInt(Context, FromIter, FromExpr, FromInt);
---
> HasFromInt = GetInt(Context, FromIter, FromExpr, FromInt,
> FromDefaultNonTypeDecl->getType());
1035c1034,1035
< HasToInt = GetInt(Context, ToIter, ToExpr, ToInt);
---
> HasToInt = GetInt(Context, ToIter, ToExpr, ToInt,
> ToDefaultNonTypeDecl->getType());
1037c1037,1041
< Tree.SetSame(IsSameConvertedInt(ParamWidth, FromInt, ToInt));
---
> if (HasFromInt && HasToInt) {
> Tree.SetSame(FromInt == ToInt);
> } else {
> Tree.SetSame(false);
> }
1213c1217,1219
< /// default arguments.
---
> /// default arguments. If the value comes from an expression, extend the
> /// APSInt to size of IntegerType to match the behavior in
> /// Sema::CheckTemplateArgument
1215c1221
< Expr *ArgExpr, llvm::APInt &Int) {
---
> Expr *ArgExpr, llvm::APSInt &Int, QualType IntegerType) {
1226a1233
> Int = Int.extOrTrunc(Context.getTypeSize(IntegerType));
1232a1240
> Int = Int.extOrTrunc(Context.getTypeSize(IntegerType));
1305,1313d1312
< /// IsSameConvertedInt - Returns true if both integers are equal when
< /// converted to an integer type with the given width.
< static bool IsSameConvertedInt(unsigned Width, const llvm::APSInt &X,
< const llvm::APSInt &Y) {
< llvm::APInt ConvertedX = X.extOrTrunc(Width);
< llvm::APInt ConvertedY = Y.extOrTrunc(Width);
< return ConvertedX == ConvertedY;
< }
<
1315,1316c1314
< static bool IsEqualExpr(ASTContext &Context, unsigned ParamWidth,
< Expr *FromExpr, Expr *ToExpr) {
---
> static bool IsEqualExpr(ASTContext &Context, Expr *FromExpr, Expr *ToExpr) {
1348c1346
< return IsSameConvertedInt(ParamWidth, FromVal.getInt(), ToVal.getInt());
---
> return FromVal.getInt() == ToVal.getInt();
1658c1656
<
---
>
1662a1661,1663
>
> E = E->IgnoreImpCasts();
>