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; } }