https://github.com/a-tarasyuk updated https://github.com/llvm/llvm-project/pull/104677
>From cd7ce740464c9c46ab231cf773fd1cf28e3495eb Mon Sep 17 00:00:00 2001 From: Oleksandr T <oleksandr.taras...@outlook.com> Date: Sat, 17 Aug 2024 19:43:45 +0300 Subject: [PATCH 1/2] [Clang] warn on discarded [[nodiscard]] function results after casting in C --- clang/docs/ReleaseNotes.rst | 2 ++ clang/lib/Sema/SemaStmt.cpp | 3 ++- clang/test/Sema/c2x-nodiscard.c | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index ffdd063ec99037..c8c6a98264b3a2 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -214,6 +214,8 @@ Improvements to Clang's diagnostics - Clang now diagnoses the use of ``main`` in an ``extern`` context as invalid according to [basic.start.main] p3. Fixes #GH101512. +- Clang now diagnoses when the result of a [[nodiscard]] function is discarded after being cast in C. Fixes #GH104391. + Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index d283eaa511011b..ba681671eb3290 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -281,7 +281,8 @@ void Sema::DiagnoseUnusedExprResult(const Stmt *S, unsigned DiagID) { E = WarnExpr; if (const auto *Cast = dyn_cast<CastExpr>(E)) if (Cast->getCastKind() == CK_NoOp || - Cast->getCastKind() == CK_ConstructorConversion) + Cast->getCastKind() == CK_ConstructorConversion || + Cast->getCastKind() == CK_IntegralCast) E = Cast->getSubExpr()->IgnoreImpCasts(); if (const CallExpr *CE = dyn_cast<CallExpr>(E)) { diff --git a/clang/test/Sema/c2x-nodiscard.c b/clang/test/Sema/c2x-nodiscard.c index cb33c0c242e7db..8b48fe8118dfe7 100644 --- a/clang/test/Sema/c2x-nodiscard.c +++ b/clang/test/Sema/c2x-nodiscard.c @@ -54,3 +54,9 @@ void test_missiles(void) { launch_missiles(); } +[[nodiscard]] int f3(); + +void f4() { +#define M (unsigned int) f3() + M; // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} +} >From d1b3369f0e7dab62710a79a611a920aee5d2c0d8 Mon Sep 17 00:00:00 2001 From: Oleksandr T <oleksandr.taras...@outlook.com> Date: Sun, 18 Aug 2024 10:50:53 +0300 Subject: [PATCH 2/2] rename test --- clang/test/Sema/c2x-nodiscard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Sema/c2x-nodiscard.c b/clang/test/Sema/c2x-nodiscard.c index 8b48fe8118dfe7..f8b0567366465d 100644 --- a/clang/test/Sema/c2x-nodiscard.c +++ b/clang/test/Sema/c2x-nodiscard.c @@ -56,7 +56,7 @@ void test_missiles(void) { [[nodiscard]] int f3(); -void f4() { +void GH104391() { #define M (unsigned int) f3() M; // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits