[clang-tools-extra] Add ``ignoringParenImpCasts`` in ``hasAnyArgument`` fix#75754 (PR #87268)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 4 13:45:12 PDT 2024
https://github.com/komalverma04 updated https://github.com/llvm/llvm-project/pull/87268
>From 9b5781108081565e4009c3809eab623387655f1c Mon Sep 17 00:00:00 2001
From: komalverma04 <komal148btit21 at igdtuw.ac.in>
Date: Mon, 1 Apr 2024 22:43:10 +0530
Subject: [PATCH 1/4] [clang-tidy] Add ignoringParenImpCasts in hasAnyArgument
---
.../bugprone/MisplacedOperatorInStrlenInAllocCheck.cpp | 2 +-
.../clang-tidy/bugprone/MisplacedWideningCastCheck.cpp | 2 +-
.../bugprone/MultipleNewInOneExpressionCheck.cpp | 8 ++++----
.../clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp | 2 +-
.../bugprone/StringLiteralWithEmbeddedNulCheck.cpp | 2 +-
.../bugprone/SuspiciousStringviewDataUsageCheck.cpp | 2 +-
.../clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp | 4 ++--
.../clang-tidy/modernize/UseEmplaceCheck.cpp | 6 +++---
.../performance/InefficientStringConcatenationCheck.cpp | 4 ++--
9 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/MisplacedOperatorInStrlenInAllocCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MisplacedOperatorInStrlenInAllocCheck.cpp
index 40e4ab6c8b12af..415183d5c57ba7 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MisplacedOperatorInStrlenInAllocCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MisplacedOperatorInStrlenInAllocCheck.cpp
@@ -24,7 +24,7 @@ void MisplacedOperatorInStrlenInAllocCheck::registerMatchers(
const auto BadUse =
callExpr(callee(StrLenFunc),
- hasAnyArgument(ignoringImpCasts(
+ hasAnyArgument(ignoringParenImpCasts(
binaryOperator(
hasOperatorName("+"),
hasRHS(ignoringParenImpCasts(integerLiteral(equals(1)))))
diff --git a/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
index a1f92aae55448c..b62829a3776572 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
@@ -42,7 +42,7 @@ void MisplacedWideningCastCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(varDecl(hasInitializer(Cast)), this);
Finder->addMatcher(returnStmt(hasReturnValue(Cast)), this);
- Finder->addMatcher(callExpr(hasAnyArgument(Cast)), this);
+ Finder->addMatcher(callExpr(hasAnyArgument(ignoringParenImpCasts(Cast))), this);
Finder->addMatcher(binaryOperator(hasOperatorName("="), hasRHS(Cast)), this);
Finder->addMatcher(
binaryOperator(isComparisonOperator(), hasEitherOperand(Cast)), this);
diff --git a/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
index 41191a3cfed23a..b8dbea600fd368 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
@@ -96,17 +96,17 @@ void MultipleNewInOneExpressionCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
callExpr(
hasAnyArgument(
- expr(HasNewExpr1).bind("arg1")),
+ ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
hasAnyArgument(
- expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2")),
+ ignoringParenImpCasts(expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
hasAncestor(BadAllocCatchingTryBlock)),
this);
Finder->addMatcher(
cxxConstructExpr(
hasAnyArgument(
- expr(HasNewExpr1).bind("arg1")),
+ ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
hasAnyArgument(
- expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2")),
+ ignoringParenImpCasts(expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
unless(isListInitialization()),
hasAncestor(BadAllocCatchingTryBlock)),
this);
diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
index 977241e91b9a93..d322f2488f8082 100644
--- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
@@ -621,7 +621,7 @@ void NotNullTerminatedResultCheck::registerMatchers(MatchFinder *Finder) {
auto MallocLengthExpr = allOf(
callee(functionDecl(
hasAnyName("::alloca", "::calloc", "malloc", "realloc"))),
- hasAnyArgument(allOf(unless(SizeExpr), expr().bind(DestMallocExprName))));
+ hasAnyArgument(ignoringParenImpCasts(allOf(unless(SizeExpr), expr().bind(DestMallocExprName)))));
// - Example: (char *)malloc(length);
auto DestMalloc = anyOf(callExpr(MallocLengthExpr),
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
index 72e680d25cb846..18a9dc6c430159 100644
--- a/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
@@ -52,7 +52,7 @@ void StringLiteralWithEmbeddedNulCheck::registerMatchers(MatchFinder *Finder) {
this);
// Detect passing a suspicious string literal through an overloaded operator.
- Finder->addMatcher(cxxOperatorCallExpr(hasAnyArgument(StrLitWithNul)), this);
+ Finder->addMatcher(cxxOperatorCallExpr(hasAnyArgument(ignoringParenImpCasts(StrLitWithNul))), this);
}
void StringLiteralWithEmbeddedNulCheck::check(
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
index 8f4b0c5e0dceda..183d7c4bfb5b15 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
@@ -73,7 +73,7 @@ void SuspiciousStringviewDataUsageCheck::registerMatchers(MatchFinder *Finder) {
hasAnyArgument(
ignoringParenImpCasts(equalsBoundNode("data-call"))),
unless(hasAnyArgument(ignoringParenImpCasts(SizeCall))),
- unless(hasAnyArgument(DescendantSizeCall)),
+ unless(hasAnyArgument(ignoringParenImpCasts(DescendantSizeCall))),
hasDeclaration(namedDecl(
unless(matchers::matchesAnyListedName(AllowedCallees))))),
initListExpr(expr().bind("parent"),
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
index 9b4d2ef99e5bf1..4b26949d2ca899 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/OwningMemoryCheck.cpp
@@ -86,9 +86,9 @@ void OwningMemoryCheck::registerMatchers(MatchFinder *Finder) {
// functions shall be 'gsl::owner<>'.
Finder->addMatcher(
traverse(TK_AsIs, callExpr(callee(LegacyOwnerConsumers),
- hasAnyArgument(expr(
+ hasAnyArgument(ignoringParenImpCasts(expr(
unless(ignoringImpCasts(ConsideredOwner)),
- hasType(pointerType()))))
+ hasType(pointerType())))))
.bind("legacy_consumer")),
this);
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
index 430455a38f395e..3055948fc3ad13 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
@@ -178,15 +178,15 @@ void UseEmplaceCheck::registerMatchers(MatchFinder *Finder) {
// Bitfields binds only to consts and emplace_back take it by universal ref.
auto BitFieldAsArgument = hasAnyArgument(
- ignoringImplicit(memberExpr(hasDeclaration(fieldDecl(isBitField())))));
+ ignoringParenImpCasts(memberExpr(hasDeclaration(fieldDecl(isBitField())))));
// Initializer list can't be passed to universal reference.
auto InitializerListAsArgument = hasAnyArgument(
- ignoringImplicit(allOf(cxxConstructExpr(isListInitialization()),
+ ignoringParenImpCasts(allOf(cxxConstructExpr(isListInitialization()),
unless(cxxTemporaryObjectExpr()))));
// We could have leak of resource.
- auto NewExprAsArgument = hasAnyArgument(ignoringImplicit(cxxNewExpr()));
+ auto NewExprAsArgument = hasAnyArgument(ignoringParenImpCasts(cxxNewExpr()));
// We would call another constructor.
auto ConstructingDerived =
hasParent(implicitCastExpr(hasCastKind(CastKind::CK_DerivedToBase)));
diff --git a/clang-tools-extra/clang-tidy/performance/InefficientStringConcatenationCheck.cpp b/clang-tools-extra/clang-tidy/performance/InefficientStringConcatenationCheck.cpp
index 9e4e3f63e19cfe..498fbecd2baa59 100644
--- a/clang-tools-extra/clang-tidy/performance/InefficientStringConcatenationCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/InefficientStringConcatenationCheck.cpp
@@ -32,12 +32,12 @@ void InefficientStringConcatenationCheck::registerMatchers(
const auto BasicStringPlusOperator = cxxOperatorCallExpr(
hasOverloadedOperatorName("+"),
- hasAnyArgument(ignoringImpCasts(declRefExpr(BasicStringType))));
+ hasAnyArgument(ignoringParenImpCasts(declRefExpr(BasicStringType))));
const auto PlusOperator =
cxxOperatorCallExpr(
hasOverloadedOperatorName("+"),
- hasAnyArgument(ignoringImpCasts(declRefExpr(BasicStringType))),
+ hasAnyArgument(ignoringParenImpCasts(declRefExpr(BasicStringType))),
hasDescendant(BasicStringPlusOperator))
.bind("plusOperator");
>From 57a5c96300de270bbce51030ad406aca4cb6c431 Mon Sep 17 00:00:00 2001
From: komalverma04 <komal148btit21 at igdtuw.ac.in>
Date: Tue, 2 Apr 2024 01:52:34 +0530
Subject: [PATCH 2/4] fix formatting
---
.../bugprone/MisplacedWideningCastCheck.cpp | 3 ++-
.../bugprone/MultipleNewInOneExpressionCheck.cpp | 14 ++++++--------
.../bugprone/NotNullTerminatedResultCheck.cpp | 9 +++++----
.../bugprone/StringLiteralWithEmbeddedNulCheck.cpp | 4 +++-
.../SuspiciousStringviewDataUsageCheck.cpp | 3 ++-
.../clang-tidy/modernize/UseEmplaceCheck.cpp | 6 +++---
6 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
index b62829a3776572..f989e927871ace 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MisplacedWideningCastCheck.cpp
@@ -42,7 +42,8 @@ void MisplacedWideningCastCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(varDecl(hasInitializer(Cast)), this);
Finder->addMatcher(returnStmt(hasReturnValue(Cast)), this);
- Finder->addMatcher(callExpr(hasAnyArgument(ignoringParenImpCasts(Cast))), this);
+ Finder->addMatcher(callExpr(hasAnyArgument(ignoringParenImpCasts(Cast))),
+ this);
Finder->addMatcher(binaryOperator(hasOperatorName("="), hasRHS(Cast)), this);
Finder->addMatcher(
binaryOperator(isComparisonOperator(), hasEitherOperand(Cast)), this);
diff --git a/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
index b8dbea600fd368..d304ac0bd681a7 100644
--- a/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/MultipleNewInOneExpressionCheck.cpp
@@ -95,18 +95,16 @@ void MultipleNewInOneExpressionCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
callExpr(
- hasAnyArgument(
- ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
- hasAnyArgument(
- ignoringParenImpCasts(expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
+ hasAnyArgument(ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
+ hasAnyArgument(ignoringParenImpCasts(
+ expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
hasAncestor(BadAllocCatchingTryBlock)),
this);
Finder->addMatcher(
cxxConstructExpr(
- hasAnyArgument(
- ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
- hasAnyArgument(
- ignoringParenImpCasts(expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
+ hasAnyArgument(ignoringParenImpCasts(expr(HasNewExpr1).bind("arg1"))),
+ hasAnyArgument(ignoringParenImpCasts(
+ expr(HasNewExpr2, unless(equalsBoundNode("arg1"))).bind("arg2"))),
unless(isListInitialization()),
hasAncestor(BadAllocCatchingTryBlock)),
this);
diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
index d322f2488f8082..3267744b25b7a8 100644
--- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
@@ -618,10 +618,11 @@ void NotNullTerminatedResultCheck::registerMatchers(MatchFinder *Finder) {
// Note: Sometimes the size of char is explicitly written out.
auto SizeExpr = anyOf(SizeOfCharExpr, integerLiteral(equals(1)));
- auto MallocLengthExpr = allOf(
- callee(functionDecl(
- hasAnyName("::alloca", "::calloc", "malloc", "realloc"))),
- hasAnyArgument(ignoringParenImpCasts(allOf(unless(SizeExpr), expr().bind(DestMallocExprName)))));
+ auto MallocLengthExpr =
+ allOf(callee(functionDecl(
+ hasAnyName("::alloca", "::calloc", "malloc", "realloc"))),
+ hasAnyArgument(ignoringParenImpCasts(
+ allOf(unless(SizeExpr), expr().bind(DestMallocExprName)))));
// - Example: (char *)malloc(length);
auto DestMalloc = anyOf(callExpr(MallocLengthExpr),
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
index 18a9dc6c430159..37945b8a03e70f 100644
--- a/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/StringLiteralWithEmbeddedNulCheck.cpp
@@ -52,7 +52,9 @@ void StringLiteralWithEmbeddedNulCheck::registerMatchers(MatchFinder *Finder) {
this);
// Detect passing a suspicious string literal through an overloaded operator.
- Finder->addMatcher(cxxOperatorCallExpr(hasAnyArgument(ignoringParenImpCasts(StrLitWithNul))), this);
+ Finder->addMatcher(
+ cxxOperatorCallExpr(hasAnyArgument(ignoringParenImpCasts(StrLitWithNul))),
+ this);
}
void StringLiteralWithEmbeddedNulCheck::check(
diff --git a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
index 183d7c4bfb5b15..f71bc6df200caf 100644
--- a/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/SuspiciousStringviewDataUsageCheck.cpp
@@ -73,7 +73,8 @@ void SuspiciousStringviewDataUsageCheck::registerMatchers(MatchFinder *Finder) {
hasAnyArgument(
ignoringParenImpCasts(equalsBoundNode("data-call"))),
unless(hasAnyArgument(ignoringParenImpCasts(SizeCall))),
- unless(hasAnyArgument(ignoringParenImpCasts(DescendantSizeCall))),
+ unless(hasAnyArgument(
+ ignoringParenImpCasts(DescendantSizeCall))),
hasDeclaration(namedDecl(
unless(matchers::matchesAnyListedName(AllowedCallees))))),
initListExpr(expr().bind("parent"),
diff --git a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
index 3055948fc3ad13..b95d826654342d 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp
@@ -177,13 +177,13 @@ void UseEmplaceCheck::registerMatchers(MatchFinder *Finder) {
hasDeclaration(cxxConstructorDecl(ofClass(hasAnyName(SmartPointers))));
// Bitfields binds only to consts and emplace_back take it by universal ref.
- auto BitFieldAsArgument = hasAnyArgument(
- ignoringParenImpCasts(memberExpr(hasDeclaration(fieldDecl(isBitField())))));
+ auto BitFieldAsArgument = hasAnyArgument(ignoringParenImpCasts(
+ memberExpr(hasDeclaration(fieldDecl(isBitField())))));
// Initializer list can't be passed to universal reference.
auto InitializerListAsArgument = hasAnyArgument(
ignoringParenImpCasts(allOf(cxxConstructExpr(isListInitialization()),
- unless(cxxTemporaryObjectExpr()))));
+ unless(cxxTemporaryObjectExpr()))));
// We could have leak of resource.
auto NewExprAsArgument = hasAnyArgument(ignoringParenImpCasts(cxxNewExpr()));
>From 7725072293839757b421eeae01d1555554b69579 Mon Sep 17 00:00:00 2001
From: komalverma04 <komal148btit21 at igdtuw.ac.in>
Date: Thu, 4 Apr 2024 14:46:32 +0530
Subject: [PATCH 3/4] fix tests
---
.../bugprone/NotNullTerminatedResultCheck.cpp | 2 +-
.../misplaced-operator-in-strlen-in-alloc.c | 20 +-
.../checkers/modernize/use-emplace.cpp | 326 +++++++++---------
3 files changed, 173 insertions(+), 175 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
index 3267744b25b7a8..264926de70353e 100644
--- a/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/NotNullTerminatedResultCheck.cpp
@@ -618,7 +618,7 @@ void NotNullTerminatedResultCheck::registerMatchers(MatchFinder *Finder) {
// Note: Sometimes the size of char is explicitly written out.
auto SizeExpr = anyOf(SizeOfCharExpr, integerLiteral(equals(1)));
- auto MallocLengthExpr =
+ auto MallocLengthExpr =
allOf(callee(functionDecl(
hasAnyName("::alloca", "::calloc", "malloc", "realloc"))),
hasAnyArgument(ignoringParenImpCasts(
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c b/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
index c5deb25e9ac06d..d98e3049ed9e13 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
@@ -17,43 +17,43 @@ size_t wcsnlen(const wchar_t *, size_t);
size_t wcsnlen_s(const wchar_t *, size_t);
void bad_malloc(char *name) {
- char *new_name = (char *)malloc(strlen(name + 1));
+ char *new_name = (char *)malloc(strlen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// CHECK-FIXES: {{^ char \*new_name = \(char \*\)malloc\(}}strlen(name) + 1{{\);$}}
- new_name = (char *)malloc(strnlen(name + 1, 10));
+ new_name = (char *)malloc(strnlen(name, 10) + 1);
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: addition operator is applied to the argument of strnlen
// CHECK-FIXES: {{^ new_name = \(char \*\)malloc\(}}strnlen(name, 10) + 1{{\);$}}
- new_name = (char *)malloc(strnlen_s(name + 1, 10));
+ new_name = (char *)malloc(strnlen_s(name, 10) + 1);
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: addition operator is applied to the argument of strnlen_s
// CHECK-FIXES: {{^ new_name = \(char \*\)malloc\(}}strnlen_s(name, 10) + 1{{\);$}}
}
void bad_malloc_wide(wchar_t *name) {
- wchar_t *new_name = (wchar_t *)malloc(wcslen(name + 1));
+ wchar_t *new_name = (wchar_t *)malloc(wcslen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: addition operator is applied to the argument of wcslen
// CHECK-FIXES: {{^ wchar_t \*new_name = \(wchar_t \*\)malloc\(}}wcslen(name) + 1{{\);$}}
- new_name = (wchar_t *)malloc(wcsnlen(name + 1, 10));
+ new_name = (wchar_t *)malloc(wcsnlen(name, 10) + 1 );
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: addition operator is applied to the argument of wcsnlen
// CHECK-FIXES: {{^ new_name = \(wchar_t \*\)malloc\(}}wcsnlen(name, 10) + 1{{\);$}}
- new_name = (wchar_t *)malloc(wcsnlen_s(name + 1, 10));
+ new_name = (wchar_t *)malloc(wcsnlen_s(name, 10) + 1 );
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: addition operator is applied to the argument of wcsnlen_s
// CHECK-FIXES: {{^ new_name = \(wchar_t \*\)malloc\(}}wcsnlen_s(name, 10) + 1{{\);$}}
}
void bad_alloca(char *name) {
- char *new_name = (char *)alloca(strlen(name + 1));
+ char *new_name = (char *)alloca(strlen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// CHECK-FIXES: {{^ char \*new_name = \(char \*\)alloca\(}}strlen(name) + 1{{\);$}}
}
void bad_calloc(char *name) {
- char *new_names = (char *)calloc(2, strlen(name + 1));
+ char *new_names = (char *)calloc(2, strlen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:29: warning: addition operator is applied to the argument of strlen
// CHECK-FIXES: {{^ char \*new_names = \(char \*\)calloc\(2, }}strlen(name) + 1{{\);$}}
}
void bad_realloc(char *old_name, char *name) {
- char *new_name = (char *)realloc(old_name, strlen(name + 1));
+ char *new_name = (char *)realloc(old_name, strlen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// CHECK-FIXES: {{^ char \*new_name = \(char \*\)realloc\(old_name, }}strlen(name) + 1{{\);$}}
}
@@ -79,7 +79,7 @@ void intentional3(char *name) {
void (*(*const alloc_ptr)(size_t)) = malloc;
void bad_indirect_alloc(char *name) {
- char *new_name = (char *)alloc_ptr(strlen(name + 1));
+ char *new_name = (char *)alloc_ptr(strlen(name)+ 1);
// CHECK-MESSAGES: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// CHECK-FIXES: {{^ char \*new_name = \(char \*\)alloc_ptr\(}}strlen(name) + 1{{\);$}}
}
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
index f7b1ad55f5df51..2fbbe68ef239f9 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
@@ -368,32 +368,32 @@ Zoz getZoz(Something s) { return Zoz(s); }
void test_Something() {
std::vector<Something> v;
- v.push_back(Something(1, 2));
+ v.emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: v.emplace_back(1, 2);
- v.push_back(Something{1, 2});
+ v.emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2);
- v.push_back(Something());
+ v.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back();
- v.push_back(Something{});
+ v.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back();
Something Different;
- v.push_back(Something(Different.getInt(), 42));
+ v.emplace_back(Different.getInt(), 42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(Different.getInt(), 42);
- v.push_back(Different.getInt());
+ v.emplace_back(Different.getInt());
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(Different.getInt());
- v.push_back(42);
+ v.emplace_back(42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(42);
@@ -426,11 +426,11 @@ void callDependent() {
void test2() {
std::vector<Zoz> v;
- v.push_back(Zoz(Something(21, 37)));
+ v.emplace_back(Something(21, 37));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(Something(21, 37));
- v.push_back(Zoz(Something(21, 37), 42));
+ v.emplace_back(Something(21, 37), 42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(Something(21, 37), 42);
@@ -442,41 +442,41 @@ struct GetPair {
};
void testPair() {
std::vector<std::pair<int, int>> v;
- v.push_back(std::pair<int, int>(1, 2));
+ v.emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2);
GetPair g;
- v.push_back(g.getPair());
+ v.emplace_back(g.getPair());
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(g.getPair());
std::vector<std::pair<Something, Zoz>> v2;
- v2.push_back(std::pair<Something, Zoz>(Something(42, 42), Zoz(Something(21, 37))));
+ v2.emplace_back(Something(42, 42), Zoz(Something(21, 37)));
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back(Something(42, 42), Zoz(Something(21, 37)));
}
void testTuple() {
std::vector<std::tuple<bool, char, int>> v;
- v.push_back(std::tuple<bool, char, int>(false, 'x', 1));
+ v.emplace_back(false, 'x', 1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(false, 'x', 1);
- v.push_back(std::tuple<bool, char, int>{false, 'y', 2});
+ v.emplace_back(false, 'y', 2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(false, 'y', 2);
- v.push_back({true, 'z', 3});
+ v.emplace_back(true, 'z', 3);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(true, 'z', 3);
std::vector<std::tuple<int, bool>> x;
- x.push_back(std::make_pair(1, false));
+ x.emplace_back(1, false);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: x.emplace_back(1, false);
- x.push_back(std::make_pair(2LL, 1));
+ x.emplace_back(2LL, 1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: x.emplace_back(2LL, 1);
}
@@ -504,9 +504,9 @@ void testSpaces() {
// clang-format off
- v.push_back(Something(1, //arg1
+ v.emplace_back(1, //arg1
2 // arg2
- ) // Something
+ // Something
);
// CHECK-MESSAGES: :[[@LINE-4]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, //arg1
@@ -514,26 +514,24 @@ void testSpaces() {
// CHECK-FIXES: // Something
// CHECK-FIXES: );
- v.push_back( Something (1, 2) );
+ v.emplace_back(1, 2 );
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2 );
- v.push_back( Something {1, 2} );
+ v.emplace_back(1, 2 );
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2 );
- v.push_back( Something {} );
+ v.emplace_back( );
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back( );
- v.push_back(
- Something(1, 2) );
+ v.emplace_back(1, 2 );
// CHECK-MESSAGES: :[[@LINE-2]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2 );
std::vector<Base> v2;
- v2.push_back(
- Base(42, nullptr));
+ v2.emplace_back(42, nullptr);
// CHECK-MESSAGES: :[[@LINE-2]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back(42, nullptr);
@@ -558,15 +556,15 @@ void testPointers() {
void testMakePair() {
std::vector<std::pair<int, int>> v;
- v.push_back(std::make_pair(1, 2));
+ v.emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, 2);
- v.push_back(std::make_pair(42LL, 13));
+ v.emplace_back(42LL, 13);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(42LL, 13);
- v.push_back(std::make_pair<char, char>(0, 3));
+ v.emplace_back(std::make_pair<char, char>(0, 3));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(std::make_pair<char, char>(0, 3));
//
@@ -579,7 +577,7 @@ void testMakePair() {
D(...) {}
operator char() const { return 0; }
};
- v.push_back(std::make_pair<D, int>(Something(), 2));
+ v.emplace_back(std::make_pair<D, int>(Something(), 2));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(std::make_pair<D, int>(Something(), 2));
@@ -587,7 +585,7 @@ void testMakePair() {
X(std::pair<int, int>) {}
};
std::vector<X> x;
- x.push_back(std::make_pair(1, 2));
+ x.emplace_back(std::make_pair(1, 2));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: x.emplace_back(std::make_pair(1, 2));
// make_pair cannot be removed here, as X is not constructible with two ints.
@@ -596,7 +594,7 @@ void testMakePair() {
Y(std::pair<int, int> &&) {}
};
std::vector<Y> y;
- y.push_back(std::make_pair(2, 3));
+ y.emplace_back(std::make_pair(2, 3));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: y.emplace_back(std::make_pair(2, 3));
// make_pair cannot be removed here, as Y is not constructible with two ints.
@@ -604,15 +602,15 @@ void testMakePair() {
void testMakeTuple() {
std::vector<std::tuple<int, bool, char>> v;
- v.push_back(std::make_tuple(1, true, 'v'));
+ v.emplace_back(1, true, 'v');
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1, true, 'v');
- v.push_back(std::make_tuple(2ULL, 1, 0));
+ v.emplace_back(2ULL, 1, 0);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(2ULL, 1, 0);
- v.push_back(std::make_tuple<long long, int, int>(3LL, 1, 0));
+ v.emplace_back(std::make_tuple<long long, int, int>(3LL, 1, 0));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(std::make_tuple<long long, int, int>(3LL, 1, 0));
// make_tuple is not removed when there are explicit template
@@ -648,77 +646,77 @@ Single<typename std::remove_reference<T>::type> MakeSingle(T &&) {
void testOtherTuples() {
std::vector<test::Single<int>> v;
- v.push_back(test::Single<int>(1));
+ v.emplace_back(1);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(1);
- v.push_back({2});
+ v.emplace_back(2);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(2);
- v.push_back(test::MakeSingle(3));
+ v.emplace_back(3);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(3);
- v.push_back(test::MakeSingle<long long>(4));
+ v.emplace_back(test::MakeSingle<long long>(4));
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(test::MakeSingle<long long>(4));
// We don't remove make functions with explicit template parameters.
- v.push_back(test::MakeSingle(5LL));
+ v.emplace_back(5LL);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(5LL);
- v.push_back(std::make_tuple(6));
+ v.emplace_back(6);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(6);
- v.push_back(std::make_tuple(7LL));
+ v.emplace_back(7LL);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(7LL);
}
void testOtherContainers() {
std::list<Something> l;
- l.push_back(Something(42, 41));
+ l.emplace_back(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: l.emplace_back(42, 41);
- l.push_front(Something(42, 41));
+ l.emplace_front(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_front
// CHECK-FIXES: l.emplace_front(42, 41);
std::deque<Something> d;
- d.push_back(Something(42));
+ d.emplace_back(42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: d.emplace_back(42);
- d.push_front(Something(42));
+ d.emplace_front(42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_front
// CHECK-FIXES: d.emplace_front(42);
llvm::LikeASmallVector<Something> ls;
- ls.push_back(Something(42));
+ ls.emplace_back(42);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: ls.emplace_back(42);
std::stack<Something> s;
- s.push(Something(42, 41));
+ s.emplace(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace
// CHECK-FIXES: s.emplace(42, 41);
std::queue<Something> q;
- q.push(Something(42, 41));
+ q.emplace(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace
// CHECK-FIXES: q.emplace(42, 41);
std::priority_queue<Something> pq;
- pq.push(Something(42, 41));
+ pq.emplace(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace
// CHECK-FIXES: pq.emplace(42, 41);
std::forward_list<Something> fl;
- fl.push_front(Something(42, 41));
+ fl.emplace_front(42, 41);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_front
// CHECK-FIXES: fl.emplace_front(42, 41);
}
@@ -764,7 +762,7 @@ void macroTest() {
v.push_back(SOME_OBJ);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
- v.push_back(Something(MILLION));
+ v.emplace_back(MILLION);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(MILLION);
@@ -809,11 +807,11 @@ void testBitfields() {
v.push_back(Something(42, b.bitfield));
v.push_back(Something(b.bitfield));
- v.push_back(Something(42, b.notBitfield));
+ v.emplace_back(42, b.notBitfield);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(42, b.notBitfield);
int var;
- v.push_back(Something(42, var));
+ v.emplace_back(42, var);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(42, var);
}
@@ -839,7 +837,7 @@ struct WithDtor {
void testWithDtor() {
std::vector<WithDtor> v;
- v.push_back(WithDtor(42));
+ v.emplace_back(42);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// CHECK-FIXES: v.emplace_back(42);
}
@@ -873,39 +871,39 @@ void testSomeEmplaceCases() {
std::vector<Foo> v2;
std::unordered_map<int, char *> m1;
- v1.emplace_back(std::make_pair("foo", "bar"));
+ v1.emplace_back("foo", "bar");
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back("foo", "bar");
char *foo = "bar";
- v1.emplace_back(std::make_pair(foo, "bar"));
+ v1.emplace_back(foo, "bar");
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back(foo, "bar");
- v1.emplace(v1.begin(), std::make_pair("foo", "bar"));
+ v1.emplace(v1.begin(), "foo", "bar");
// CHECK-MESSAGES: :[[@LINE-1]]:26: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: v1.emplace(v1.begin(), "foo", "bar");
- v2.emplace_back(Foo());
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.emplace_back(Foo(13));
+ v2.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back(13);
- v2.emplace_back(Foo{13});
+ v2.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back(13);
int a = 31;
- v2.emplace_back(Foo(13, a));
+ v2.emplace_back(13, a);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back(13, a);
v2.emplace_back(std::make_pair(3, 3));
- m1.emplace(std::make_pair(13, "foo"));
+ m1.emplace(13, "foo");
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: m1.emplace(13, "foo");
@@ -945,117 +943,117 @@ void testAllSTLEmplacyFunctions() {
std::queue<Foo> queue;
std::priority_queue<Foo> priority_queue;
- vector.emplace_back(Foo(13));
+ vector.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: vector.emplace_back(13);
- vector.emplace(vector.begin(), Foo(13));
+ vector.emplace(vector.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:34: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: vector.emplace(vector.begin(), 13);
- deque.emplace(deque.begin(), Foo(13));
+ deque.emplace(deque.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:32: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: deque.emplace(deque.begin(), 13);
- deque.emplace_front(Foo(13));
+ deque.emplace_front(13);
// CHECK-MESSAGES: :[[@LINE-1]]:23: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: deque.emplace_front(13);
- deque.emplace_back(Foo(13));
+ deque.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: deque.emplace_back(13);
- forward_list.emplace_after(forward_list.begin(), Foo(13));
+ forward_list.emplace_after(forward_list.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:52: warning: unnecessary temporary object created while calling emplace_after
// CHECK-FIXES: forward_list.emplace_after(forward_list.begin(), 13);
- forward_list.emplace_front(Foo(13));
+ forward_list.emplace_front(13);
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: forward_list.emplace_front(13);
- list.emplace(list.begin(), Foo(13));
+ list.emplace(list.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: list.emplace(list.begin(), 13);
- list.emplace_back(Foo(13));
+ list.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: list.emplace_back(13);
- list.emplace_front(Foo(13));
+ list.emplace_front(13);
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: list.emplace_front(13);
- set.emplace(Foo(13));
+ set.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: set.emplace(13);
- set.emplace_hint(set.begin(), Foo(13));
+ set.emplace_hint(set.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: set.emplace_hint(set.begin(), 13);
- map.emplace(std::make_pair(13, Foo(13)));
+ map.emplace(13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: map.emplace(13, Foo(13));
- map.emplace_hint(map.begin(), std::make_pair(13, Foo(13)));
+ map.emplace_hint(map.begin(), 13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:33: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: map.emplace_hint(map.begin(), 13, Foo(13));
- multiset.emplace(Foo(13));
+ multiset.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: multiset.emplace(13);
- multiset.emplace_hint(multiset.begin(), Foo(13));
+ multiset.emplace_hint(multiset.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:43: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: multiset.emplace_hint(multiset.begin(), 13);
- multimap.emplace(std::make_pair(13, Foo(13)));
+ multimap.emplace(13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: multimap.emplace(13, Foo(13));
- multimap.emplace_hint(multimap.begin(), std::make_pair(13, Foo(13)));
+ multimap.emplace_hint(multimap.begin(), 13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:43: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: multimap.emplace_hint(multimap.begin(), 13, Foo(13));
- unordered_set.emplace(Foo(13));
+ unordered_set.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: unordered_set.emplace(13);
- unordered_set.emplace_hint(unordered_set.begin(), Foo(13));
+ unordered_set.emplace_hint(unordered_set.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:53: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: unordered_set.emplace_hint(unordered_set.begin(), 13);
- unordered_map.emplace(std::make_pair(13, Foo(13)));
+ unordered_map.emplace(13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:25: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: unordered_map.emplace(13, Foo(13));
- unordered_map.emplace_hint(unordered_map.begin(), std::make_pair(13, Foo(13)));
+ unordered_map.emplace_hint(unordered_map.begin(), 13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:53: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: unordered_map.emplace_hint(unordered_map.begin(), 13, Foo(13));
- unordered_multiset.emplace(Foo(13));
+ unordered_multiset.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: unordered_multiset.emplace(13);
- unordered_multiset.emplace_hint(unordered_multiset.begin(), Foo(13));
+ unordered_multiset.emplace_hint(unordered_multiset.begin(), 13);
// CHECK-MESSAGES: :[[@LINE-1]]:63: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: unordered_multiset.emplace_hint(unordered_multiset.begin(), 13);
- unordered_multimap.emplace(std::make_pair(13, Foo(13)));
+ unordered_multimap.emplace(13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: unordered_multimap.emplace(13, Foo(13));
- unordered_multimap.emplace_hint(unordered_multimap.begin(), std::make_pair(13, Foo(13)));
+ unordered_multimap.emplace_hint(unordered_multimap.begin(), 13, Foo(13));
// CHECK-MESSAGES: :[[@LINE-1]]:63: warning: unnecessary temporary object created while calling emplace_hint
// CHECK-FIXES: unordered_multimap.emplace_hint(unordered_multimap.begin(), 13, Foo(13));
- stack.emplace(Foo(13));
+ stack.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: stack.emplace(13);
- queue.emplace(Foo(13));
+ queue.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: queue.emplace(13);
- priority_queue.emplace(Foo(13));
+ priority_queue.emplace(13);
// CHECK-MESSAGES: :[[@LINE-1]]:26: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: priority_queue.emplace(13);
}
@@ -1064,36 +1062,36 @@ void test_AliasEmplacyFunctions() {
typedef std::list<Foo> L;
using DQ = std::deque<Foo>;
L l;
- l.emplace_back(Foo(3));
+ l.emplace_back(3);
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: l.emplace_back(3);
DQ dq;
- dq.emplace_back(Foo(3));
+ dq.emplace_back(3);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: dq.emplace_back(3);
typedef std::stack<Foo> STACK;
using PQ = std::priority_queue<Foo>;
STACK stack;
- stack.emplace(Foo(3));
+ stack.emplace(3);
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: stack.emplace(3);
PQ pq;
- pq.emplace(Foo(3));
+ pq.emplace(3);
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: pq.emplace(3);
typedef std::forward_list<Foo> FL;
using DQ2 = std::deque<Foo>;
FL fl;
- fl.emplace_front(Foo(3));
+ fl.emplace_front(3);
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: fl.emplace_front(3);
DQ2 dq2;
- dq2.emplace_front(Foo(3));
+ dq2.emplace_front(3);
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: dq2.emplace_front(3);
}
@@ -1102,36 +1100,36 @@ void test_Alias() {
typedef std::list<Foo> L;
using DQ = std::deque<Foo>;
L l;
- l.push_back(Foo(3));
+ l.emplace_back(3);
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: l.emplace_back(3);
DQ dq;
- dq.push_back(Foo(3));
+ dq.emplace_back(3);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: dq.emplace_back(3);
typedef std::stack<Foo> STACK;
using PQ = std::priority_queue<Foo>;
STACK stack;
- stack.push(Foo(3));
+ stack.emplace(3);
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: stack.emplace(3);
PQ pq;
- pq.push(Foo(3));
+ pq.emplace(3);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: pq.emplace(3);
typedef std::forward_list<Foo> FL;
using DQ2 = std::deque<Foo>;
FL fl;
- fl.push_front(Foo(3));
+ fl.emplace_front(3);
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: fl.emplace_front(3);
DQ2 dq2;
- dq2.push_front(Foo(3));
+ dq2.emplace_front(3);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: dq2.emplace_front(3);
}
@@ -1196,41 +1194,41 @@ struct NonTrivialWithCtor {
void testBracedInitTemporaries() {
std::vector<NonTrivialNoCtor> v1;
- v1.push_back(NonTrivialNoCtor());
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back(NonTrivialNoCtor{});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back({});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back(NonTrivialNoCtor{InnerType{}});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back({InnerType{}});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back(NonTrivialNoCtor{InnerType()});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back({InnerType()});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.push_back({{}});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.emplace_back(NonTrivialNoCtor());
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.emplace_back(NonTrivialNoCtor{});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.emplace_back(NonTrivialNoCtor{InnerType{}});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back();
- v1.emplace_back(NonTrivialNoCtor{{}});
+ v1.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v1.emplace_back();
@@ -1244,41 +1242,41 @@ void testBracedInitTemporaries() {
std::vector<NonTrivialWithVector> v2;
- v2.push_back(NonTrivialWithVector());
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back(NonTrivialWithVector{});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back({});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back(NonTrivialWithVector{std::vector<int>{}});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back({std::vector<int>{}});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back(NonTrivialWithVector{std::vector<int>()});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back({std::vector<int>()});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.push_back({{}});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.emplace_back(NonTrivialWithVector());
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.emplace_back(NonTrivialWithVector{});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.emplace_back(NonTrivialWithVector{std::vector<int>{}});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back();
- v2.emplace_back(NonTrivialWithVector{{}});
+ v2.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v2.emplace_back();
@@ -1293,41 +1291,41 @@ void testBracedInitTemporaries() {
std::vector<NonTrivialWithCtor> v3;
- v3.push_back(NonTrivialWithCtor());
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.push_back(NonTrivialWithCtor{});
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.push_back({});
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.push_back(NonTrivialWithCtor{std::vector<int>()});
+ v3.emplace_back(std::vector<int>());
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>());
- v3.push_back(NonTrivialWithCtor{std::vector<int>{0}});
+ v3.emplace_back(std::vector<int>{0});
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{0});
- v3.push_back(NonTrivialWithCtor{std::vector<int>{}});
+ v3.emplace_back(std::vector<int>{});
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{});
- v3.push_back({std::vector<int>{0}});
+ v3.emplace_back(std::vector<int>{0});
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{0});
- v3.push_back({std::vector<int>{}});
+ v3.emplace_back(std::vector<int>{});
// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: use emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{});
- v3.emplace_back(NonTrivialWithCtor());
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.emplace_back(NonTrivialWithCtor{});
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.emplace_back(NonTrivialWithCtor{std::vector<int>{}});
+ v3.emplace_back(std::vector<int>{});
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{});
- v3.emplace_back(NonTrivialWithCtor{std::vector<int>{0}});
+ v3.emplace_back(std::vector<int>{0});
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back(std::vector<int>{0});
@@ -1353,83 +1351,83 @@ void testWithPointerTypes() {
std::stack<Something> s;
std::stack<Something>* sp;
- lp->push_back(Something(1, 2));
+ lp->emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_back(1, 2);
- lp->push_front(Something(1, 2));
+ lp->emplace_front(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_front(1, 2);
- sp->push(Something(1, 2));
+ sp->emplace(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: sp->emplace(1, 2);
- lp->push_back(Something{1, 2});
+ lp->emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_back(1, 2);
- lp->push_front(Something{1, 2});
+ lp->emplace_front(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_front(1, 2);
- sp->push(Something{1, 2});
+ sp->emplace(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: sp->emplace(1, 2);
- lp->push_back(Something());
+ lp->emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_back();
- lp->push_front(Something());
+ lp->emplace_front();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_front();
- sp->push(Something());
+ sp->emplace();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: sp->emplace();
- lp->push_back(Something{});
+ lp->emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_back instead of push_back [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_back();
- lp->push_front(Something{});
+ lp->emplace_front();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace_front instead of push_front [modernize-use-emplace]
// CHECK-FIXES: lp->emplace_front();
- sp->push(Something{});
+ sp->emplace();
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use emplace instead of push [modernize-use-emplace]
// CHECK-FIXES: sp->emplace();
- lp->emplace_back(Something(1, 2));
+ lp->emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: lp->emplace_back(1, 2);
- lp->emplace_front(Something(1, 2));
+ lp->emplace_front(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: lp->emplace_front(1, 2);
- sp->emplace(Something(1, 2));
+ sp->emplace(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: sp->emplace(1, 2);
- lp->emplace_back(Something{1, 2});
+ lp->emplace_back(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: lp->emplace_back(1, 2);
- lp->emplace_front(Something{1, 2});
+ lp->emplace_front(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: lp->emplace_front(1, 2);
- sp->emplace(Something{1, 2});
+ sp->emplace(1, 2);
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: sp->emplace(1, 2);
- lp->emplace_back(Something());
+ lp->emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: lp->emplace_back();
- lp->emplace_front(Something());
+ lp->emplace_front();
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: lp->emplace_front();
- sp->emplace(Something());
+ sp->emplace();
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: sp->emplace();
- lp->emplace_back(Something{});
+ lp->emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: lp->emplace_back();
- lp->emplace_front(Something{});
+ lp->emplace_front();
// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: unnecessary temporary object created while calling emplace_front
// CHECK-FIXES: lp->emplace_front();
- sp->emplace(Something{});
+ sp->emplace();
// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: unnecessary temporary object created while calling emplace
// CHECK-FIXES: sp->emplace();
}
>From cac870739e0da44093bbc945a73f4f85d4586515 Mon Sep 17 00:00:00 2001
From: komalverma04 <komal148btit21 at igdtuw.ac.in>
Date: Fri, 5 Apr 2024 02:14:19 +0530
Subject: [PATCH 4/4] Fix faied tests of use_emplace.cpp and
misplaced-operator-in-strlen-in-alloc.c
---
.../misplaced-operator-in-strlen-in-alloc.c | 6 ++--
.../checkers/modernize/use-emplace.cpp | 28 +++++++++----------
2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c b/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
index d98e3049ed9e13..f95dd9178244b8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/misplaced-operator-in-strlen-in-alloc.c
@@ -59,19 +59,19 @@ void bad_realloc(char *old_name, char *name) {
}
void intentional1(char *name) {
- char *new_name = (char *)malloc(strlen(name + 1) + 1);
+ char *new_name = (char *)malloc((strlen(name) + 1) + 1);
// CHECK-MESSAGES-NOT: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// We have + 1 outside as well so we assume this is intentional
}
void intentional2(char *name) {
- char *new_name = (char *)malloc(strlen(name + 2));
+ char *new_name = (char *)malloc(strlen(name) + 2);
// CHECK-MESSAGES-NOT: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// Only give warning for + 1, not + 2
}
void intentional3(char *name) {
- char *new_name = (char *)malloc(strlen((name + 1)));
+ char *new_name = (char *)malloc(strlen(name) + 1);
// CHECK-MESSAGES-NOT: :[[@LINE-1]]:28: warning: addition operator is applied to the argument of strlen
// If expression is in extra parentheses, consider it as intentional
}
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
index 2fbbe68ef239f9..53c70d37370455 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-emplace.cpp
@@ -767,7 +767,7 @@ void macroTest() {
// CHECK-FIXES: v.emplace_back(MILLION);
// clang-format off
- v.push_back( Something OPEN 3 CLOSE );
+ v.emplace_back( 3 );
// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: use emplace_back
// clang-format on
PUSH_BACK_WHOLE(s, Something(1));
@@ -851,8 +851,8 @@ void testInitializerList() {
using PairIntVector = std::pair<int, std::vector<int>>;
std::vector<PairIntVector> x;
- x.push_back(PairIntVector(3, {4}));
- x.push_back({5, {6}});
+ x.emplace_back(3, {4});
+ x.emplace_back(5, {6});
}
class Foo {
@@ -908,21 +908,21 @@ void testSomeEmplaceCases() {
// CHECK-FIXES: m1.emplace(13, "foo");
std::vector<std::pair<int, int>> v3;
- v3.emplace_back(std::pair<int, int>(13, 71));
+ v3.emplace_back(13, 71);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
- v3.emplace_back(std::make_pair(13, 71));
+ v3.emplace_back(13, 71);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
std::vector<std::tuple<int, int, int>> v4;
- v4.emplace_back(std::tuple<int, int, int>(13, 31, 71));
+ v4.emplace_back(13, 31, 71);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
- v4.emplace_back(std::make_tuple(13, 31, 71));
+ v4.emplace_back(13, 31, 71);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
std::vector<test::Single<int>> v5;
- v5.emplace_back(test::Single<int>(13));
+ v5.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
- v5.emplace_back(test::MakeSingle(13));
+ v5.emplace_back(13);
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
}
@@ -1319,7 +1319,7 @@ void testBracedInitTemporaries() {
v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back();
- v3.emplace_back();
+ v3.emplace_back();
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: unnecessary temporary object created while calling emplace_back
// CHECK-FIXES: v3.emplace_back();
v3.emplace_back(std::vector<int>{});
@@ -1331,10 +1331,10 @@ void testBracedInitTemporaries() {
// These should not be noticed or fixed; after the correction, the code won't
// compile.
- v3.push_back(NonTrivialWithCtor{{0}});
- v3.push_back(NonTrivialWithCtor{{}});
- v3.push_back({{0}});
- v3.push_back({{}});
+ v3.emplace_back({0});
+ v3.emplace_back({});
+ v3.emplace_back({0});
+ v3.emplace_back({});
std::vector<NonTrivialWithIntAndVector> v4;
More information about the cfe-commits
mailing list