From f546ade7fc99f254fd9ee2b8db0d316db5b670cf Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Sat, 7 Aug 2010 01:52:47 +0000 Subject: [PATCH] Bug 321933 fixed f.p. in assignment to itself checker when assignment is in macro --- .../internal/checkers/AssignmentToItselfChecker.java | 7 ++++++- .../checkers/AssignmentToItselfCheckerTest.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/AssignmentToItselfChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/AssignmentToItselfChecker.java index f672f8f4f24..09d1a330492 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/AssignmentToItselfChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/AssignmentToItselfChecker.java @@ -44,7 +44,12 @@ public class AssignmentToItselfChecker extends AbstractIndexAstChecker { if (e instanceof IASTBinaryExpression) { IASTBinaryExpression binExpr = (IASTBinaryExpression) e; if (binExpr.getOperator() == IASTBinaryExpression.op_assign) { - return binExpr.getOperand1().getRawSignature().equals(binExpr.getOperand2().getRawSignature()); + String op1 = binExpr.getOperand1().getRawSignature(); + String op2 = binExpr.getOperand2().getRawSignature(); + String expr = binExpr.getRawSignature(); + return op1.equals(op2) + // when macro is used RawSignature returns macro name, see Bug 321933 + && !op1.equals(expr); } } return false; diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/AssignmentToItselfCheckerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/AssignmentToItselfCheckerTest.java index e4e14848a23..bbf1f05d4b1 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/AssignmentToItselfCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/AssignmentToItselfCheckerTest.java @@ -54,4 +54,14 @@ public class AssignmentToItselfCheckerTest extends CheckerTestCase { loadCodeAndRun(getAboveComment()); checkErrorLine(4); } + + // #define X a = 1 + // void main() { + // int a; + // X; + // } + public void testNoError_Bug321933() { + loadCodeAndRun(getAboveComment()); + checkNoErrors(); + } }