Skip to content

Commit f8f93fe

Browse files
[clang][Sema] Refine unused-member-function diagnostic message for constructors
1 parent e0d4906 commit f8f93fe

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ def warn_unused_function : Warning<"unused function %0">,
400400
InGroup<UnusedFunction>, DefaultIgnore;
401401
def warn_unused_template : Warning<"unused %select{function|variable}0 template %1">,
402402
InGroup<UnusedTemplate>, DefaultIgnore;
403-
def warn_unused_member_function : Warning<"unused member function %0">,
403+
def warn_unused_member_function : Warning<"unused %select{member function|constructor}0 %1">,
404404
InGroup<UnusedMemberFunction>, DefaultIgnore;
405405
def warn_used_but_marked_unused: Warning<"%0 was marked unused but was used">,
406406
InGroup<UsedButMarkedUnused>, DefaultIgnore;

clang/lib/Sema/Sema.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1398,11 +1398,16 @@ void Sema::ActOnEndOfTranslationUnit() {
13981398
if (FD->getDescribedFunctionTemplate())
13991399
Diag(DiagD->getLocation(), diag::warn_unused_template)
14001400
<< /*function=*/0 << DiagD << DiagRange;
1401-
else
1402-
Diag(DiagD->getLocation(), isa<CXXMethodDecl>(DiagD)
1403-
? diag::warn_unused_member_function
1404-
: diag::warn_unused_function)
1405-
<< DiagD << DiagRange;
1401+
else {
1402+
if (isa<CXXMethodDecl>(DiagD))
1403+
Diag(DiagD->getLocation(), diag::warn_unused_member_function)
1404+
<< (!isa<CXXConstructorDecl>(DiagD) ? /*member function=*/0
1405+
: /*constructor=*/1)
1406+
<< DiagD << DiagRange;
1407+
else
1408+
Diag(DiagD->getLocation(), diag::warn_unused_function)
1409+
<< DiagD << DiagRange;
1410+
}
14061411
}
14071412
} else {
14081413
const VarDecl *DiagD = cast<VarDecl>(*I)->getDefinition();

clang/test/SemaCXX/warn-unused-filescoped.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,33 @@ struct S {
7676
struct SVS : public VS {
7777
void vm() { }
7878
};
79+
80+
struct CS {
81+
CS() {}
82+
CS(bool a) {}
83+
CS(int b) {} // expected-warning{{unused constructor 'CS'}}
84+
CS(float c);
85+
};
86+
87+
struct DCS : public CS {
88+
DCS() = default; // expected-warning{{unused constructor 'DCS'}}
89+
DCS(bool a) : CS(a) {} // expected-warning{{unused constructor 'DCS'}}
90+
DCS(const DCS&) {}
91+
DCS(DCS&&) {} // expected-warning{{unused constructor 'DCS'}}
92+
};
93+
94+
template<typename T>
95+
struct TCS {
96+
TCS();
97+
};
98+
template <typename T> TCS<T>::TCS() {}
99+
template <> TCS<int>::TCS() {} // expected-warning{{unused constructor 'TCS'}}
79100
}
80101

81102
void S::m3() {} // expected-warning{{unused member function 'm3'}}
82103

104+
CS::CS(float c) {} // expected-warning{{unused constructor 'CS'}}
105+
83106
static inline void f4() {} // expected-warning{{unused function 'f4'}}
84107
const unsigned int cx = 0; // expected-warning{{unused variable 'cx'}}
85108
const unsigned int cy = 0;

0 commit comments

Comments
 (0)