From d87f6ff74ca1d0f3fb9fb9e87c39ac7511afb753 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Fri, 21 May 2010 03:37:16 +0000 Subject: [PATCH] Bug 313817 Fixed f.p. when assignment is overloaded operator --- .../checkers/StatementHasNoEffectChecker.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java index 4b4a6149679..11f5f9370b3 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java @@ -127,6 +127,7 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { addPreference(problem, PARAM_MACRO_ID, CheckersMessages.StatementHasNoEffectChecker_ParameterMacro, Boolean.TRUE); + } /** @@ -139,19 +140,7 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { @SuppressWarnings("restriction") public boolean isLValue(IASTBinaryExpression expr) { - if (expr instanceof CPPASTBinaryExpression) { - // unfortunately ICPPASTBinaryExpression does not have - // getOverload public method - CPPASTBinaryExpression cppBin = (CPPASTBinaryExpression) expr; - ICPPFunction overload = cppBin.getOverload(); - if (overload != null) - return false; - IType expressionType = cppBin.getOperand1().getExpressionType(); - if (!(expressionType instanceof IBasicType)) { - return false; // must be overloaded but parser could not - // find it - } - } + switch (expr.getOperator()) { case IASTBinaryExpression.op_assign: case IASTBinaryExpression.op_binaryAndAssign: @@ -166,6 +155,19 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { case IASTBinaryExpression.op_shiftRightAssign: return true; } + if (expr instanceof CPPASTBinaryExpression) { + // unfortunately ICPPASTBinaryExpression does not have + // getOverload public method + CPPASTBinaryExpression cppBin = (CPPASTBinaryExpression) expr; + ICPPFunction overload = cppBin.getOverload(); + if (overload != null) + return true; + IType expressionType = cppBin.getOperand1().getExpressionType(); + if (!(expressionType instanceof IBasicType)) { + return true; // must be overloaded but parser could not + // find it + } + } return false; } }