|
15 | 15 | #include "UsedDeclVisitor.h"
|
16 | 16 | #include "clang/AST/ASTConsumer.h"
|
17 | 17 | #include "clang/AST/ASTContext.h"
|
18 |
| -#include "clang/AST/ASTDiagnostic.h" |
19 | 18 | #include "clang/AST/ASTLambda.h"
|
20 | 19 | #include "clang/AST/ASTMutationListener.h"
|
21 | 20 | #include "clang/AST/CXXInheritance.h"
|
@@ -1569,91 +1568,15 @@ void Sema::checkEnumArithmeticConversions(Expr *LHS, Expr *RHS,
|
1569 | 1568 | }
|
1570 | 1569 | }
|
1571 | 1570 |
|
1572 |
| -static void CheckUnicodeArithmeticConversions(Sema &SemaRef, Expr *LHS, |
1573 |
| - Expr *RHS, SourceLocation Loc, |
1574 |
| - ArithConvKind ACK) { |
1575 |
| - QualType LHSType = LHS->getType().getUnqualifiedType(); |
1576 |
| - QualType RHSType = RHS->getType().getUnqualifiedType(); |
1577 |
| - |
1578 |
| - if (!SemaRef.getLangOpts().CPlusPlus || !LHSType->isUnicodeCharacterType() || |
1579 |
| - !RHSType->isUnicodeCharacterType()) |
1580 |
| - return; |
1581 |
| - |
1582 |
| - if (ACK == ArithConvKind::Comparison) { |
1583 |
| - if (SemaRef.getASTContext().hasSameType(LHSType, RHSType)) |
1584 |
| - return; |
1585 |
| - |
1586 |
| - auto IsSingleCodeUnitCP = [](const QualType &T, const llvm::APSInt &Value) { |
1587 |
| - if (T->isChar8Type()) |
1588 |
| - return llvm::IsSingleCodeUnitUTF8Codepoint(Value.getExtValue()); |
1589 |
| - if (T->isChar16Type()) |
1590 |
| - return llvm::IsSingleCodeUnitUTF16Codepoint(Value.getExtValue()); |
1591 |
| - assert(T->isChar32Type()); |
1592 |
| - return llvm::IsSingleCodeUnitUTF32Codepoint(Value.getExtValue()); |
1593 |
| - }; |
1594 |
| - |
1595 |
| - Expr::EvalResult LHSRes, RHSRes; |
1596 |
| - bool LHSSuccess = LHS->EvaluateAsInt(LHSRes, SemaRef.getASTContext(), |
1597 |
| - Expr::SE_AllowSideEffects, |
1598 |
| - SemaRef.isConstantEvaluatedContext()); |
1599 |
| - bool RHSuccess = RHS->EvaluateAsInt(RHSRes, SemaRef.getASTContext(), |
1600 |
| - Expr::SE_AllowSideEffects, |
1601 |
| - SemaRef.isConstantEvaluatedContext()); |
1602 |
| - |
1603 |
| - // Don't warn if the one known value is a representable |
1604 |
| - // in the type of both expressions. |
1605 |
| - if (LHSSuccess != RHSuccess) { |
1606 |
| - Expr::EvalResult &Res = LHSSuccess ? LHSRes : RHSRes; |
1607 |
| - if (IsSingleCodeUnitCP(LHSType, Res.Val.getInt()) && |
1608 |
| - IsSingleCodeUnitCP(RHSType, Res.Val.getInt())) |
1609 |
| - return; |
1610 |
| - } |
1611 |
| - |
1612 |
| - if (!LHSSuccess || !RHSuccess) { |
1613 |
| - SemaRef.Diag(Loc, diag::warn_comparison_unicode_mixed_types) |
1614 |
| - << LHS->getSourceRange() << RHS->getSourceRange() << LHSType |
1615 |
| - << RHSType; |
1616 |
| - return; |
1617 |
| - } |
1618 |
| - |
1619 |
| - llvm::APSInt LHSValue(32); |
1620 |
| - LHSValue = LHSRes.Val.getInt(); |
1621 |
| - llvm::APSInt RHSValue(32); |
1622 |
| - RHSValue = RHSRes.Val.getInt(); |
1623 |
| - |
1624 |
| - bool LHSSafe = IsSingleCodeUnitCP(LHSType, LHSValue); |
1625 |
| - bool RHSSafe = IsSingleCodeUnitCP(RHSType, RHSValue); |
1626 |
| - if (LHSSafe && RHSSafe) |
1627 |
| - return; |
1628 |
| - |
1629 |
| - SemaRef.Diag(Loc, diag::warn_comparison_unicode_mixed_types_constant) |
1630 |
| - << LHS->getSourceRange() << RHS->getSourceRange() << LHSType << RHSType |
1631 |
| - << FormatUTFCodeUnitAsCodepoint(LHSValue.getExtValue(), LHSType) |
1632 |
| - << FormatUTFCodeUnitAsCodepoint(RHSValue.getExtValue(), RHSType); |
1633 |
| - return; |
1634 |
| - } |
1635 |
| - |
1636 |
| - if (SemaRef.getASTContext().hasSameType(LHSType, RHSType)) |
1637 |
| - return; |
1638 |
| - |
1639 |
| - SemaRef.Diag(Loc, diag::warn_arith_conv_mixed_unicode_types) |
1640 |
| - << LHS->getSourceRange() << RHS->getSourceRange() << ACK << LHSType |
1641 |
| - << RHSType; |
1642 |
| - return; |
1643 |
| -} |
1644 |
| - |
1645 | 1571 | /// UsualArithmeticConversions - Performs various conversions that are common to
|
1646 | 1572 | /// binary operators (C99 6.3.1.8). If both operands aren't arithmetic, this
|
1647 | 1573 | /// routine returns the first non-arithmetic type found. The client is
|
1648 | 1574 | /// responsible for emitting appropriate error diagnostics.
|
1649 | 1575 | QualType Sema::UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
|
1650 | 1576 | SourceLocation Loc,
|
1651 | 1577 | ArithConvKind ACK) {
|
1652 |
| - |
1653 | 1578 | checkEnumArithmeticConversions(LHS.get(), RHS.get(), Loc, ACK);
|
1654 | 1579 |
|
1655 |
| - CheckUnicodeArithmeticConversions(*this, LHS.get(), RHS.get(), Loc, ACK); |
1656 |
| - |
1657 | 1580 | if (ACK != ArithConvKind::CompAssign) {
|
1658 | 1581 | LHS = UsualUnaryConversions(LHS.get());
|
1659 | 1582 | if (LHS.isInvalid())
|
|
0 commit comments