[llvm] Add __attribute__((warn_unused_result)) to LLVMErrorRef (PR #87025)
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 28 16:59:04 PDT 2024
https://github.com/dwblaikie created https://github.com/llvm/llvm-project/pull/87025
Sending this out a bit half-baked unfortunately - we added support for
this context a couple of years ago in D102122 (which turned up in clang 15
onwards: https://godbolt.org/z/haz8qrTT3 ), not sure if the macro detection
will correctly detect that the attribute is usable in a typedef context...
Original Differential Revision: https://reviews.llvm.org/D153163
>From d88df4b3870a95f1533dbceec895f1952a297769 Mon Sep 17 00:00:00 2001
From: David Blaikie <dblaikie at gmail.com>
Date: Thu, 2 Jun 2022 23:10:36 +0000
Subject: [PATCH] Add __attribute__((warn_unused_result)) to LLVMErrorRef
Sending this out a bit half-baked unfortunately - we added support for
this context a couple of years ago in D102122 (which turned up in clang 15
onwards: https://godbolt.org/z/haz8qrTT3 ), not sure if the macro detection
will correctly detect that the attribute is usable in a typedef context...
Original Differential Revision: https://reviews.llvm.org/D153163
---
.../OrcV2CBindingsLazy/OrcV2CBindingsLazy.c | 2 +-
.../OrcV2CBindingsVeryLazy.c | 6 +++---
llvm/include/llvm-c/Error.h | 2 +-
llvm/include/llvm-c/ExternC.h | 14 ++++++++++++++
.../ExecutionEngine/Orc/OrcCAPITest.cpp | 18 +++++++++---------
5 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsLazy/OrcV2CBindingsLazy.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsLazy/OrcV2CBindingsLazy.c
index c63495a48fd894..34b3806409ca54 100644
--- a/llvm/examples/OrcV2Examples/OrcV2CBindingsLazy/OrcV2CBindingsLazy.c
+++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsLazy/OrcV2CBindingsLazy.c
@@ -195,7 +195,7 @@ int main(int argc, char *argv[]) {
LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J);
LLVMOrcMaterializationUnitRef MU =
LLVMOrcLazyReexports(LCTM, ISM, MainJD, ReExports, 2);
- LLVMOrcJITDylibDefine(MainJD, MU);
+ (void)LLVMOrcJITDylibDefine(MainJD, MU);
}
// Look up the address of our demo entry point.
diff --git a/llvm/examples/OrcV2Examples/OrcV2CBindingsVeryLazy/OrcV2CBindingsVeryLazy.c b/llvm/examples/OrcV2Examples/OrcV2CBindingsVeryLazy/OrcV2CBindingsVeryLazy.c
index 864194c2f17fc7..e6e81df4188a0c 100644
--- a/llvm/examples/OrcV2Examples/OrcV2CBindingsVeryLazy/OrcV2CBindingsVeryLazy.c
+++ b/llvm/examples/OrcV2Examples/OrcV2CBindingsVeryLazy/OrcV2CBindingsVeryLazy.c
@@ -220,8 +220,8 @@ int main(int argc, char *argv[]) {
&Materialize, NULL, &Destroy);
LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J);
- LLVMOrcJITDylibDefine(MainJD, FooMU);
- LLVMOrcJITDylibDefine(MainJD, BarMU);
+ (void)LLVMOrcJITDylibDefine(MainJD, FooMU);
+ (void)LLVMOrcJITDylibDefine(MainJD, BarMU);
}
// add lazy reexports
@@ -251,7 +251,7 @@ int main(int argc, char *argv[]) {
LLVMOrcJITDylibRef MainJD = LLVMOrcLLJITGetMainJITDylib(J);
LLVMOrcMaterializationUnitRef MU =
LLVMOrcLazyReexports(LCTM, ISM, MainJD, ReExports, 2);
- LLVMOrcJITDylibDefine(MainJD, MU);
+ (void)LLVMOrcJITDylibDefine(MainJD, MU);
}
// Look up the address of our demo entry point.
diff --git a/llvm/include/llvm-c/Error.h b/llvm/include/llvm-c/Error.h
index c3baaf65186aac..ef6470efd5b60a 100644
--- a/llvm/include/llvm-c/Error.h
+++ b/llvm/include/llvm-c/Error.h
@@ -30,7 +30,7 @@ LLVM_C_EXTERN_C_BEGIN
/**
* Opaque reference to an error instance. Null serves as the 'success' value.
*/
-typedef struct LLVMOpaqueError *LLVMErrorRef;
+LLVM_NODISCARD_TYPEDEF typedef struct LLVMOpaqueError *LLVMErrorRef;
/**
* Error type identifier.
diff --git a/llvm/include/llvm-c/ExternC.h b/llvm/include/llvm-c/ExternC.h
index dfa21bdc085723..4d3033ef3b3126 100644
--- a/llvm/include/llvm-c/ExternC.h
+++ b/llvm/include/llvm-c/ExternC.h
@@ -36,4 +36,18 @@
#define LLVM_C_EXTERN_C_END LLVM_C_STRICT_PROTOTYPES_END
#endif
+#ifndef LLVM_HAS_ATTRIBUTE
+#if defined(__has_attribute)
+#define LLVM_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+#define LLVM_HAS_ATTRIBUTE(x) 0
+#endif
+#endif
+
+#if LLVM_HAS_ATTRIBUTE(warn_unused_result) && defined(__clang__)
+#define LLVM_NODISCARD_TYPEDEF __attribute__((warn_unused_result))
+#else
+#define LLVM_NODISCARD_TYPEDEF
+#endif
+
#endif
diff --git a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
index cbdd4af47e1d47..ab5330d2fa26ee 100644
--- a/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
@@ -84,7 +84,7 @@ class OrcCAPITestBase : public testing::Test {
return;
}
- LLVMOrcDisposeLLJIT(J);
+ (void)LLVMOrcDisposeLLJIT(J);
TargetSupported = true;
}
@@ -110,7 +110,7 @@ class OrcCAPITestBase : public testing::Test {
// Check whether Jit has already been torn down -- we allow clients to do
// this manually to check teardown behavior.
if (Jit) {
- LLVMOrcDisposeLLJIT(Jit);
+ (void)LLVMOrcDisposeLLJIT(Jit);
Jit = nullptr;
}
}
@@ -441,7 +441,7 @@ TEST_F(OrcCAPITestBase, ResourceTrackerDefinitionLifetime) {
FAIL() << "Symbol \"sum\" was not added into JIT (triple = " << TargetTriple
<< "): " << toString(E);
ASSERT_TRUE(!!TestFnAddr);
- LLVMOrcResourceTrackerRemove(RT);
+ (void)LLVMOrcResourceTrackerRemove(RT);
LLVMOrcJITTargetAddress OutAddr;
LLVMErrorRef Err = LLVMOrcLLJITLookup(Jit, &OutAddr, "sum");
ASSERT_TRUE(Err);
@@ -576,7 +576,7 @@ void Materialize(void *Ctx, LLVMOrcMaterializationResponsibilityRef MR) {
{OtherSymbol, Flags},
{DependencySymbol, Flags},
};
- LLVMOrcMaterializationResponsibilityDefineMaterializing(MR, NewSymbols, 2);
+ (void)LLVMOrcMaterializationResponsibilityDefineMaterializing(MR, NewSymbols, 2);
LLVMOrcRetainSymbolStringPoolEntry(OtherSymbol);
LLVMOrcMaterializationResponsibilityRef OtherMR = NULL;
@@ -636,13 +636,13 @@ void Materialize(void *Ctx, LLVMOrcMaterializationResponsibilityRef MR) {
// See FIXME above
LLVMOrcCSymbolMapPair Pair = {DependencySymbol, Sym};
- LLVMOrcMaterializationResponsibilityNotifyResolved(MR, &Pair, 1);
+ (void)LLVMOrcMaterializationResponsibilityNotifyResolved(MR, &Pair, 1);
// DependencySymbol no longer owned by us
Pair = {TargetSym.Name, Sym};
- LLVMOrcMaterializationResponsibilityNotifyResolved(MR, &Pair, 1);
+ (void)LLVMOrcMaterializationResponsibilityNotifyResolved(MR, &Pair, 1);
- LLVMOrcMaterializationResponsibilityNotifyEmitted(MR);
+ (void)LLVMOrcMaterializationResponsibilityNotifyEmitted(MR);
LLVMOrcDisposeMaterializationResponsibility(MR);
}
@@ -655,7 +655,7 @@ TEST_F(OrcCAPITestBase, MaterializationResponsibility) {
LLVMOrcMaterializationUnitRef MU = LLVMOrcCreateCustomMaterializationUnit(
"MU", (void *)Jit, &Sym, 1, NULL, &Materialize, NULL, &Destroy);
LLVMOrcJITDylibRef JD = LLVMOrcLLJITGetMainJITDylib(Jit);
- LLVMOrcJITDylibDefine(JD, MU);
+ (void)LLVMOrcJITDylibDefine(JD, MU);
LLVMOrcJITTargetAddress Addr;
if (LLVMErrorRef Err = LLVMOrcLLJITLookup(Jit, &Addr, "foo")) {
@@ -777,7 +777,7 @@ TEST_F(OrcCAPITestBase, SuspendedLookup) {
LLVMOrcReleaseSymbolStringPoolEntry(Ctx.NameToGenerate);
// Explicitly tear down the JIT.
- LLVMOrcDisposeLLJIT(Jit);
+ (void)LLVMOrcDisposeLLJIT(Jit);
Jit = nullptr;
// Check that the generator context was "destroyed".
More information about the llvm-commits
mailing list