================
@@ -1604,6 +1610,40 @@ void Sema::ActOnEndOfTranslationUnit() {
emitAndClearUnusedLocalTypedefWarnings();
}
+ if (!Diags.isIgnored(diag::warn_unused_but_set_variable, SourceLocation())) {
+ // Diagnose unused-but-set static globals in a deterministic order.
+ // Not tracking shadowing info for static globals; there's nothing to
+ // shadow.
+ struct LocAndDiag {
+ SourceLocation Loc;
+ PartialDiagnostic PD;
+ };
+ SmallVector<LocAndDiag, 16> DeclDiags;
+ auto addDiag = [&DeclDiags](SourceLocation Loc, PartialDiagnostic PD) {
+ DeclDiags.push_back(LocAndDiag{Loc, std::move(PD)});
+ };
+
+ // For -Wunused-but-set-variable we only care about variables that were
+ // referenced by the TU end.
+ for (const auto &Ref : RefsMinusAssignments) {
+ const VarDecl *VD = Ref.first;
+ // Only diagnose internal linkage file vars defined in the main file to
+ // match -Wunused-variable behavior and avoid false positives from
+ // headers.
+ if (VD->isInternalLinkageFileVar() && isMainFileLoc(VD->getLocation()))
+ DiagnoseUnusedButSetDecl(VD, addDiag);
+ }
+
+ llvm::sort(DeclDiags,
+ [](const LocAndDiag &LHS, const LocAndDiag &RHS) -> bool {
+ // Sorting purely for determinism; matches behavior in
+ // Sema::ActOnPopScope (operator< compares raw encoding).
----------------
zwuis wrote:
> (operator< compares raw encoding)
Looks redundant to me.
https://github.com/llvm/llvm-project/pull/178342
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits