const struct val_lab **val_labs_sorted (const struct val_labs *);
 
 /* Properties of entire sets. */
-unsigned int val_labs_hash (const struct val_labs *, unsigned int basis);
+unsigned int val_labs_hash (const struct val_labs *, unsigned int basis) WARN_UNUSED_RESULT;
 bool val_labs_equal (const struct val_labs *, const struct val_labs *);
 
 #endif /* data/value-labels.h */
 
 #ifndef DATA_VALUE_H
 #define DATA_VALUE_H 1
 
+#include "libpspp/compiler.h"
 #include <assert.h>
 #include <stdbool.h>
 #include <stdlib.h>
 void value_set_missing (union value *, int width);
 int value_compare_3way (const union value *, const union value *, int width);
 bool value_equal (const union value *, const union value *, int width);
-unsigned int value_hash (const union value *, int width, unsigned int basis);
+unsigned int value_hash (const union value *, int width, unsigned int basis) WARN_UNUSED_RESULT;
 
 bool value_is_resizable (const union value *, int old_width, int new_width);
 bool value_needs_resize (int old_width, int new_width);
 
 #ifndef LIBPSPP_HASH_FUNCTIONS_H
 #define LIBPSPP_HASH_FUNCTIONS_H 1
 
+#include "libpspp/compiler.h"
 #include <stddef.h>
 
-unsigned int hash_bytes (const void *, size_t, unsigned int basis);
-unsigned int hash_string (const char *, unsigned int basis);
-unsigned int hash_int (int, unsigned int basis);
-unsigned int hash_double (double, unsigned int basis);
-unsigned int hash_pointer (const void *, unsigned int basis);
+unsigned int hash_bytes (const void *, size_t, unsigned int basis) WARN_UNUSED_RESULT;
+unsigned int hash_string (const char *, unsigned int basis) WARN_UNUSED_RESULT;
+unsigned int hash_int (int, unsigned int basis) WARN_UNUSED_RESULT;
+unsigned int hash_double (double, unsigned int basis) WARN_UNUSED_RESULT;
+unsigned int hash_pointer (const void *, unsigned int basis) WARN_UNUSED_RESULT;
 
 #endif /* libpspp/hash-functions.h */
 
 #ifndef I18N_H
 #define I18N_H
 
+#include "libpspp/compiler.h"
 #include <stdbool.h>
 #include <unistr.h>
 
 
 const char *uc_name (ucs4_t uc, char buffer[16]);
 
-unsigned int utf8_hash_case_bytes (const char *, size_t n, unsigned int basis);
-unsigned int utf8_hash_case_string (const char *, unsigned int basis);
+unsigned int utf8_hash_case_bytes (const char *, size_t n, unsigned int basis) WARN_UNUSED_RESULT;
+unsigned int utf8_hash_case_string (const char *, unsigned int basis) WARN_UNUSED_RESULT;
 int utf8_strcasecmp (const char *, const char *);
 int utf8_strncasecmp (const char *, size_t, const char *, size_t);
 int utf8_strverscasecmp (const char *, const char *);
 
 #ifndef LIBPSPP_SPARSE_XARRAY_H
 #define LIBPSPP_SPARSE_XARRAY_H 1
 
+#include "libpspp/compiler.h"
 #include <stddef.h>
 #include <stdbool.h>
 
 
 /* For testing purposes only. */
 unsigned int sparse_xarray_model_checker_hash (const struct sparse_xarray *,
-                                               unsigned int basis);
+                                               unsigned int basis) WARN_UNUSED_RESULT;
 
 #endif /* libpspp/sparse-libpspp.h */
 
 #define _INTERACTION_H__ 1
 
 #include <stdbool.h>
+#include "libpspp/compiler.h"
 #include "data/missing-values.h"
 
 struct ccase;
 
 
 unsigned int interaction_case_hash (const struct interaction *,
-                                    const struct ccase *, unsigned int base);
+                                    const struct ccase *,
+                                   unsigned int base) WARN_UNUSED_RESULT;
 bool interaction_case_equal (const struct interaction *, const struct ccase *,
                              const struct ccase *);
 bool interaction_case_is_missing (const struct interaction *,