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(); + } }