Index: cfe/trunk/docs/LibASTMatchersReference.html
===================================================================
--- cfe/trunk/docs/LibASTMatchersReference.html
+++ cfe/trunk/docs/LibASTMatchersReference.html
@@ -1872,6 +1872,14 @@
integerLiteral(equals(42))
matches 42
+Note that you cannot directly match a negative numeric literal because the
+minus sign is not part of the literal: It is a unary operator whose operand
+is the positive numeric literal. Instead, you must use a unaryOperator()
+matcher to match the minus sign:
+
+unaryOperator(hasOperatorName("-"),
+ hasUnaryOperand(integerLiteral(equals(13))))
+
Usable as: Matcher<CharacterLiteral>, Matcher<CXXBoolLiteralExpr>,
Matcher<FloatingLiteral>, Matcher<IntegerLiteral>
@@ -2327,6 +2335,14 @@
integerLiteral(equals(42))
matches 42
+Note that you cannot directly match a negative numeric literal because the
+minus sign is not part of the literal: It is a unary operator whose operand
+is the positive numeric literal. Instead, you must use a unaryOperator()
+matcher to match the minus sign:
+
+unaryOperator(hasOperatorName("-"),
+ hasUnaryOperand(integerLiteral(equals(13))))
+
Usable as: Matcher<CharacterLiteral>, Matcher<CXXBoolLiteralExpr>,
Matcher<FloatingLiteral>, Matcher<IntegerLiteral>
@@ -2583,6 +2599,14 @@
integerLiteral(equals(42))
matches 42
+Note that you cannot directly match a negative numeric literal because the
+minus sign is not part of the literal: It is a unary operator whose operand
+is the positive numeric literal. Instead, you must use a unaryOperator()
+matcher to match the minus sign:
+
+unaryOperator(hasOperatorName("-"),
+ hasUnaryOperand(integerLiteral(equals(13))))
+
Usable as: Matcher<CharacterLiteral>, Matcher<CXXBoolLiteralExpr>,
Matcher<FloatingLiteral>, Matcher<IntegerLiteral>
@@ -2866,6 +2890,14 @@
integerLiteral(equals(42))
matches 42
+Note that you cannot directly match a negative numeric literal because the
+minus sign is not part of the literal: It is a unary operator whose operand
+is the positive numeric literal. Instead, you must use a unaryOperator()
+matcher to match the minus sign:
+
+unaryOperator(hasOperatorName("-"),
+ hasUnaryOperand(integerLiteral(equals(13))))
+
Usable as: Matcher<CharacterLiteral>, Matcher<CXXBoolLiteralExpr>,
Matcher<FloatingLiteral>, Matcher<IntegerLiteral>
Index: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
===================================================================
--- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
+++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
@@ -3821,6 +3821,14 @@
/// integerLiteral(equals(42))
/// matches 42
///
+/// Note that you cannot directly match a negative numeric literal because the
+/// minus sign is not part of the literal: It is a unary operator whose operand
+/// is the positive numeric literal. Instead, you must use a unaryOperator()
+/// matcher to match the minus sign:
+///
+/// unaryOperator(hasOperatorName("-"),
+/// hasUnaryOperand(integerLiteral(equals(13))))
+///
/// Usable as: Matcher, Matcher,
/// Matcher, Matcher
template
Index: cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
===================================================================
--- cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
+++ cfe/trunk/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
@@ -666,6 +666,12 @@
EXPECT_TRUE(notMatches("int i = 'a';", HasIntLiteral));
EXPECT_TRUE(notMatches("int i = 1e10;", HasIntLiteral));
EXPECT_TRUE(notMatches("int i = 10.0;", HasIntLiteral));
+
+ // Negative integers.
+ EXPECT_TRUE(
+ matches("int i = -10;",
+ unaryOperator(hasOperatorName("-"),
+ hasUnaryOperand(integerLiteral(equals(10))))));
}
TEST(Matcher, FloatLiterals) {