summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-11-15 16:18:29 -0500
committerGitHub <noreply@github.com>2024-11-15 13:18:29 -0800
commit368c1edf2a6182dcde7a91e6facbf3dbdd6c7456 (patch)
tree048eb337ab186d3548a3b4460de39e513e5da4a6 /src
parentce1a2b480ae89e65b4d94e1bb3332c5980e2479f (diff)
downloadbinaryen-368c1edf2a6182dcde7a91e6facbf3dbdd6c7456.tar.gz
binaryen-368c1edf2a6182dcde7a91e6facbf3dbdd6c7456.tar.bz2
binaryen-368c1edf2a6182dcde7a91e6facbf3dbdd6c7456.zip
Mark Result and MaybeResult [[nodiscard]] (#7083)
Since these types may be carrying errors that need to be handled or propagated, it is always an error not to use them in some way. Adding the [[nodiscard]] attribute caused the compiler to find a few instances where we were incorrectly ignoring results. Fix these places.
Diffstat (limited to 'src')
-rw-r--r--src/parser/parsers.h6
-rw-r--r--src/support/result.h4
2 files changed, 5 insertions, 5 deletions
diff --git a/src/parser/parsers.h b/src/parser/parsers.h
index 4121788d7..2d3321dcd 100644
--- a/src/parser/parsers.h
+++ b/src/parser/parsers.h
@@ -1099,7 +1099,7 @@ block(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto type = blocktype(ctx);
CHECK_ERR(type);
- ctx.makeBlock(pos, annotations, label, *type);
+ CHECK_ERR(ctx.makeBlock(pos, annotations, label, *type));
CHECK_ERR(instrs(ctx));
@@ -1162,7 +1162,7 @@ ifelse(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
return ctx.in.err("else label does not match if label");
}
- ctx.visitElse();
+ CHECK_ERR(ctx.visitElse());
CHECK_ERR(instrs(ctx));
@@ -1205,7 +1205,7 @@ loop(Ctx& ctx, const std::vector<Annotation>& annotations, bool folded) {
auto type = blocktype(ctx);
CHECK_ERR(type);
- ctx.makeLoop(pos, annotations, label, *type);
+ CHECK_ERR(ctx.makeLoop(pos, annotations, label, *type));
CHECK_ERR(instrs(ctx));
diff --git a/src/support/result.h b/src/support/result.h
index ab71d3a53..7cd360d53 100644
--- a/src/support/result.h
+++ b/src/support/result.h
@@ -40,7 +40,7 @@ struct Err {
}
// Represent a result of type T or an error message.
-template<typename T = Ok> struct Result {
+template<typename T = Ok> struct [[nodiscard]] Result {
std::variant<T, Err> val;
Result(Result<T>& other) = default;
@@ -56,7 +56,7 @@ template<typename T = Ok> struct Result {
};
// Represent an optional result of type T or an error message.
-template<typename T = Ok> struct MaybeResult {
+template<typename T = Ok> struct [[nodiscard]] MaybeResult {
std::variant<T, None, Err> val;
MaybeResult() : val(None{}) {}