[PATCH] D49800: [clang-tidy: modernize] modernize-redundant-void-arg crashes when a function body is in a macro
Alexander Kornienko via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 10 07:00:26 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL339433: [clang-tidy: modernize] modernize-redundant-void-arg crashes when a function… (authored by alexfh, committed by ).
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D49800?vs=160039&id=160103#toc
Repository:
rL LLVM
https://reviews.llvm.org/D49800
Files:
clang-tools-extra/trunk/clang-tidy/modernize/RedundantVoidArgCheck.cpp
clang-tools-extra/trunk/test/clang-tidy/modernize-redundant-void-arg.cpp
Index: clang-tools-extra/trunk/test/clang-tidy/modernize-redundant-void-arg.cpp
===================================================================
--- clang-tools-extra/trunk/test/clang-tidy/modernize-redundant-void-arg.cpp
+++ clang-tools-extra/trunk/test/clang-tidy/modernize-redundant-void-arg.cpp
@@ -445,3 +445,46 @@
// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: {{.*}} in function definition
// CHECK-FIXES: DefinitionWithNoBody() = delete;
};
+
+
+
+#define BODY {}
+#define LAMBDA1 [](void){}
+// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+// CHECK-FIXES: LAMBDA1 [](){}
+
+#define LAMBDA2 [](void)BODY
+// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+// CHECK-FIXES: LAMBDA2 []()BODY
+
+#define LAMBDA3(captures, args, body) captures args body
+#define WRAP(...) __VA_ARGS__
+
+#define LAMBDA4 (void)LAMBDA3([],(void),BODY)
+// CHECK-MESSAGES: :[[@LINE-1]]:35: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+// CHECK-FIXES: LAMBDA4 (void)LAMBDA3([],(),BODY)
+
+#define LAMBDA5 []() -> void (*)(void) {return BODY;}
+// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+// CHECK-FIXES: LAMBDA5 []() -> void (*)() {return BODY;}
+void lambda_expression_with_macro_test(){
+ (void)LAMBDA1;
+ (void)LAMBDA2;
+ (void)LAMBDA3([], (void), BODY);
+ // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+ // CHECK-FIXES: (void)LAMBDA3([], (), BODY);
+
+ LAMBDA4;
+ LAMBDA5;
+ WRAP((void)WRAP(WRAP(LAMBDA3(WRAP([]), WRAP((void)), WRAP(BODY)))));
+ // CHECK-MESSAGES: :[[@LINE-1]]:48: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+ // CHECK-FIXES: WRAP((void)WRAP(WRAP(LAMBDA3(WRAP([]), WRAP(()), WRAP(BODY)))));
+
+ (void)WRAP([](void) {});
+ // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+ // CHECK-FIXES: (void)WRAP([]() {});
+
+ [](void) BODY;
+ // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: redundant void argument list in lambda expression [modernize-redundant-void-arg]
+ // CHECK-FIXES: []() BODY;
+}
Index: clang-tools-extra/trunk/clang-tidy/modernize/RedundantVoidArgCheck.cpp
===================================================================
--- clang-tools-extra/trunk/clang-tidy/modernize/RedundantVoidArgCheck.cpp
+++ clang-tools-extra/trunk/clang-tidy/modernize/RedundantVoidArgCheck.cpp
@@ -149,6 +149,8 @@
ProtoToken.getRawIdentifier() == "void") {
State = SawVoid;
VoidToken = ProtoToken;
+ } else if (ProtoToken.is(tok::TokenKind::l_paren)) {
+ State = SawLeftParen;
} else {
State = NothingYet;
}
@@ -235,10 +237,11 @@
const MatchFinder::MatchResult &Result, const LambdaExpr *Lambda) {
if (Lambda->getLambdaClass()->getLambdaCallOperator()->getNumParams() == 0 &&
Lambda->hasExplicitParameters()) {
- SourceLocation Begin =
- Lambda->getIntroducerRange().getEnd().getLocWithOffset(1);
- SourceLocation End = Lambda->getBody()->getBeginLoc().getLocWithOffset(-1);
- removeVoidArgumentTokens(Result, SourceRange(Begin, End),
+ SourceManager *SM = Result.SourceManager;
+ TypeLoc TL = Lambda->getLambdaClass()->getLambdaTypeInfo()->getTypeLoc();
+ removeVoidArgumentTokens(Result,
+ {SM->getSpellingLoc(TL.getBeginLoc()),
+ SM->getSpellingLoc(TL.getEndLoc())},
"lambda expression");
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49800.160103.patch
Type: text/x-patch
Size: 3797 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180810/26e4fd50/attachment.bin>
More information about the llvm-commits
mailing list