Module Name:    src
Committed By:   rillig
Date:           Wed Dec 15 09:53:42 UTC 2021

Modified Files:
        src/usr.bin/make: dir.h hash.h job.h lst.h make.h make_malloc.h meta.h
            metachar.h nonints.h

Log Message:
make: mark several functions whose result must be used

Suggested by sjg, to catch more bugs like the memory leak in cond.c
1.303 from 2021-12-13.

No binary change.


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/usr.bin/make/dir.h
cvs rdiff -u -r1.41 -r1.42 src/usr.bin/make/hash.h
cvs rdiff -u -r1.73 -r1.74 src/usr.bin/make/job.h
cvs rdiff -u -r1.99 -r1.100 src/usr.bin/make/lst.h
cvs rdiff -u -r1.273 -r1.274 src/usr.bin/make/make.h
cvs rdiff -u -r1.16 -r1.17 src/usr.bin/make/make_malloc.h
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/meta.h
cvs rdiff -u -r1.17 -r1.18 src/usr.bin/make/metachar.h
cvs rdiff -u -r1.218 -r1.219 src/usr.bin/make/nonints.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/dir.h
diff -u src/usr.bin/make/dir.h:1.44 src/usr.bin/make/dir.h:1.45
--- src/usr.bin/make/dir.h:1.44	Sat Apr  3 11:08:40 2021
+++ src/usr.bin/make/dir.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: dir.h,v 1.44 2021/04/03 11:08:40 rillig Exp $	*/
+/*	$NetBSD: dir.h,v 1.45 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -82,18 +82,18 @@ void Dir_InitCur(const char *);
 void Dir_InitDot(void);
 void Dir_End(void);
 void Dir_SetPATH(void);
-bool Dir_HasWildcards(const char *);
+bool Dir_HasWildcards(const char *) MAKE_ATTR_USE;
 void SearchPath_Expand(SearchPath *, const char *, StringList *);
-char *Dir_FindFile(const char *, SearchPath *);
-char *Dir_FindHereOrAbove(const char *, const char *);
+char *Dir_FindFile(const char *, SearchPath *) MAKE_ATTR_USE;
+char *Dir_FindHereOrAbove(const char *, const char *) MAKE_ATTR_USE;
 void Dir_UpdateMTime(GNode *, bool);
 CachedDir *SearchPath_Add(SearchPath *, const char *);
-char *SearchPath_ToFlags(SearchPath *, const char *);
+char *SearchPath_ToFlags(SearchPath *, const char *) MAKE_ATTR_USE;
 void SearchPath_Clear(SearchPath *);
 void SearchPath_AddAll(SearchPath *, SearchPath *);
 void Dir_PrintDirectories(void);
 void SearchPath_Print(const SearchPath *);
-SearchPath *Dir_CopyDirSearchPath(void);
+SearchPath *Dir_CopyDirSearchPath(void) MAKE_ATTR_USE;
 
 /* Stripped-down variant of struct stat. */
 struct cached_stat {

Index: src/usr.bin/make/hash.h
diff -u src/usr.bin/make/hash.h:1.41 src/usr.bin/make/hash.h:1.42
--- src/usr.bin/make/hash.h:1.41	Tue Dec  7 21:58:01 2021
+++ src/usr.bin/make/hash.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hash.h,v 1.41 2021/12/07 21:58:01 rillig Exp $	*/
+/*	$NetBSD: hash.h,v 1.42 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -108,7 +108,7 @@ typedef struct HashSet {
 	HashTable tbl;
 } HashSet;
 
-MAKE_INLINE void *
+MAKE_INLINE void * MAKE_ATTR_USE
 HashEntry_Get(HashEntry *h)
 {
 	return h->value;
@@ -131,11 +131,13 @@ HashIter_Init(HashIter *hi, HashTable *t
 
 void HashTable_Init(HashTable *);
 void HashTable_Done(HashTable *);
-HashEntry *HashTable_FindEntry(HashTable *, const char *);
-void *HashTable_FindValue(HashTable *, const char *);
-unsigned int Hash_Substring(Substring);
-void *HashTable_FindValueBySubstringHash(HashTable *, Substring, unsigned int);
+HashEntry *HashTable_FindEntry(HashTable *, const char *) MAKE_ATTR_USE;
+void *HashTable_FindValue(HashTable *, const char *) MAKE_ATTR_USE;
+unsigned int Hash_Substring(Substring) MAKE_ATTR_USE;
+void *HashTable_FindValueBySubstringHash(HashTable *, Substring, unsigned int)
+    MAKE_ATTR_USE;
 HashEntry *HashTable_CreateEntry(HashTable *, const char *, bool *);
+/* TODO: change return type to void */
 HashEntry *HashTable_Set(HashTable *, const char *, void *);
 void HashTable_DeleteEntry(HashTable *, HashEntry *);
 void HashTable_DebugStats(HashTable *, const char *);
@@ -164,7 +166,7 @@ HashSet_Add(HashSet *set, const char *ke
 	return isNew;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 HashSet_Contains(HashSet *set, const char *key)
 {
 	return HashTable_FindEntry(&set->tbl, key) != NULL;

Index: src/usr.bin/make/job.h
diff -u src/usr.bin/make/job.h:1.73 src/usr.bin/make/job.h:1.74
--- src/usr.bin/make/job.h:1.73	Sat Apr  3 11:08:40 2021
+++ src/usr.bin/make/job.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.h,v 1.73 2021/04/03 11:08:40 rillig Exp $	*/
+/*	$NetBSD: job.h,v 1.74 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -187,24 +187,25 @@ extern char *shellErrFlag;
 extern int jobTokensRunning;	/* tokens currently "out" */
 
 void Shell_Init(void);
-const char *Shell_GetNewline(void);
+const char *Shell_GetNewline(void) MAKE_ATTR_USE;
 void Job_Touch(GNode *, bool);
-bool Job_CheckCommands(GNode *, void (*abortProc)(const char *, ...));
+bool Job_CheckCommands(GNode *, void (*abortProc)(const char *, ...))
+    MAKE_ATTR_USE;
 void Job_CatchChildren(void);
 void Job_CatchOutput(void);
 void Job_Make(GNode *);
 void Job_Init(void);
-bool Job_ParseShell(char *);
+bool Job_ParseShell(char *) MAKE_ATTR_USE;
 int Job_Finish(void);
 void Job_End(void);
 void Job_Wait(void);
 void Job_AbortAll(void);
 void Job_TokenReturn(void);
-bool Job_TokenWithdraw(void);
+bool Job_TokenWithdraw(void) MAKE_ATTR_USE;
 void Job_ServerStart(int, int, int);
 void Job_SetPrefix(void);
 bool Job_RunTarget(const char *, const char *);
 void Job_FlagsToString(const Job *, char *, size_t);
-int Job_TempFile(const char *, char *, size_t);
+int Job_TempFile(const char *, char *, size_t) MAKE_ATTR_USE;
 
 #endif /* MAKE_JOB_H */

Index: src/usr.bin/make/lst.h
diff -u src/usr.bin/make/lst.h:1.99 src/usr.bin/make/lst.h:1.100
--- src/usr.bin/make/lst.h:1.99	Sun Dec  5 10:11:31 2021
+++ src/usr.bin/make/lst.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lst.h,v 1.99 2021/12/05 10:11:31 rillig Exp $	*/
+/*	$NetBSD: lst.h,v 1.100 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -104,7 +104,7 @@ typedef void LstFreeProc(void *);
 /* Create or destroy a list */
 
 /* Create a new list. */
-List *Lst_New(void);
+List *Lst_New(void) MAKE_ATTR_USE;
 /* Free the list nodes, but not the list itself. */
 void Lst_Done(List *);
 /* Free the list nodes, freeing the node data using the given function. */
@@ -124,14 +124,14 @@ Lst_Init(List *list)
 
 /* Get information about a list */
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 Lst_IsEmpty(List *list)
 {
 	return list->first == NULL;
 }
 
 /* Find the first node that contains the given datum, or NULL. */
-ListNode *Lst_FindDatum(List *, const void *);
+ListNode *Lst_FindDatum(List *, const void *) MAKE_ATTR_USE;
 
 /* Modify a list */
 
@@ -163,7 +163,7 @@ Lst_Enqueue(List *list, void *datum) {
 }
 
 /* Remove the head node of the queue and return its datum. */
-void *Lst_Dequeue(List *);
+void *Lst_Dequeue(List *) MAKE_ATTR_USE;
 
 /*
  * A vector is an ordered collection of items, allowing for fast indexed
@@ -182,7 +182,7 @@ void Vector_Init(Vector *, size_t);
  * Return the pointer to the given item in the vector.
  * The returned data is valid until the next modifying operation.
  */
-MAKE_INLINE void *
+MAKE_INLINE void * MAKE_ATTR_USE
 Vector_Get(Vector *v, size_t i)
 {
 	unsigned char *items = v->items;

Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.273 src/usr.bin/make/make.h:1.274
--- src/usr.bin/make/make.h:1.273	Wed Dec 15 09:29:55 2021
+++ src/usr.bin/make/make.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.273 2021/12/15 09:29:55 rillig Exp $	*/
+/*	$NetBSD: make.h,v 1.274 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -689,75 +689,75 @@ extern CmdOpts opts;
 #include "nonints.h"
 
 void GNode_UpdateYoungestChild(GNode *, GNode *);
-bool GNode_IsOODate(GNode *);
+bool GNode_IsOODate(GNode *) MAKE_ATTR_USE;
 void Make_ExpandUse(GNodeList *);
-time_t Make_Recheck(GNode *);
+time_t Make_Recheck(GNode *) MAKE_ATTR_USE;
 void Make_HandleUse(GNode *, GNode *);
 void Make_Update(GNode *);
 void GNode_SetLocalVars(GNode *);
 bool Make_Run(GNodeList *);
-bool shouldDieQuietly(GNode *, int);
+bool shouldDieQuietly(GNode *, int) MAKE_ATTR_USE;
 void PrintOnError(GNode *, const char *);
 void Main_ExportMAKEFLAGS(bool);
 bool Main_SetObjdir(bool, const char *, ...) MAKE_ATTR_PRINTFLIKE(2, 3);
-int mkTempFile(const char *, char *, size_t);
+int mkTempFile(const char *, char *, size_t) MAKE_ATTR_USE;
 int str2Lst_Append(StringList *, char *);
 void GNode_FprintDetails(FILE *, const char *, const GNode *, const char *);
-bool GNode_ShouldExecute(GNode *gn);
+bool GNode_ShouldExecute(GNode *gn) MAKE_ATTR_USE;
 
 /* See if the node was seen on the left-hand side of a dependency operator. */
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 GNode_IsTarget(const GNode *gn)
 {
 	return (gn->type & OP_OPMASK) != OP_NONE;
 }
 
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_Path(const GNode *gn)
 {
 	return gn->path != NULL ? gn->path : gn->name;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 GNode_IsWaitingFor(const GNode *gn)
 {
 	return gn->flags.remake && gn->made <= REQUESTED;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 GNode_IsReady(const GNode *gn)
 {
 	return gn->made > DEFERRED;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 GNode_IsDone(const GNode *gn)
 {
 	return gn->made >= MADE;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 GNode_IsError(const GNode *gn)
 {
 	return gn->made == ERROR || gn->made == ABORTED;
 }
 
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarTarget(GNode *gn) { return GNode_ValueDirect(gn, TARGET); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarOodate(GNode *gn) { return GNode_ValueDirect(gn, OODATE); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarAllsrc(GNode *gn) { return GNode_ValueDirect(gn, ALLSRC); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarImpsrc(GNode *gn) { return GNode_ValueDirect(gn, IMPSRC); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarPrefix(GNode *gn) { return GNode_ValueDirect(gn, PREFIX); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarArchive(GNode *gn) { return GNode_ValueDirect(gn, ARCHIVE); }
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 GNode_VarMember(GNode *gn) { return GNode_ValueDirect(gn, MEMBER); }
 
-MAKE_INLINE void *
+MAKE_INLINE void * MAKE_ATTR_USE
 UNCONST(const void *ptr)
 {
 	void *ret;
@@ -780,19 +780,19 @@ UNCONST(const void *ptr)
 #define KILLPG(pid, sig) killpg((pid), (sig))
 #endif
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 ch_isalnum(char ch) { return isalnum((unsigned char)ch) != 0; }
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 ch_isalpha(char ch) { return isalpha((unsigned char)ch) != 0; }
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 ch_isdigit(char ch) { return isdigit((unsigned char)ch) != 0; }
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 ch_isspace(char ch) { return isspace((unsigned char)ch) != 0; }
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 ch_isupper(char ch) { return isupper((unsigned char)ch) != 0; }
-MAKE_INLINE char
+MAKE_INLINE char MAKE_ATTR_USE
 ch_tolower(char ch) { return (char)tolower((unsigned char)ch); }
-MAKE_INLINE char
+MAKE_INLINE char MAKE_ATTR_USE
 ch_toupper(char ch) { return (char)toupper((unsigned char)ch); }
 
 MAKE_INLINE void

Index: src/usr.bin/make/make_malloc.h
diff -u src/usr.bin/make/make_malloc.h:1.16 src/usr.bin/make/make_malloc.h:1.17
--- src/usr.bin/make/make_malloc.h:1.16	Tue Jan 19 20:51:46 2021
+++ src/usr.bin/make/make_malloc.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: make_malloc.h,v 1.16 2021/01/19 20:51:46 rillig Exp $	*/
+/*	$NetBSD: make_malloc.h,v 1.17 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -27,10 +27,10 @@
  */
 
 #ifndef USE_EMALLOC
-void *bmake_malloc(size_t);
-void *bmake_realloc(void *, size_t);
-char *bmake_strdup(const char *);
-char *bmake_strldup(const char *, size_t);
+void *bmake_malloc(size_t) MAKE_ATTR_USE;
+void *bmake_realloc(void *, size_t) MAKE_ATTR_USE;
+char *bmake_strdup(const char *) MAKE_ATTR_USE;
+char *bmake_strldup(const char *, size_t) MAKE_ATTR_USE;
 #else
 #include <util.h>
 #define bmake_malloc(n)		emalloc(n)
@@ -39,7 +39,7 @@ char *bmake_strldup(const char *, size_t
 #define bmake_strldup(s, n)	estrndup(s, n)
 #endif
 
-char *bmake_strsedup(const char *, const char *);
+char *bmake_strsedup(const char *, const char *) MAKE_ATTR_USE;
 
 /*
  * Thin wrapper around free(3) to avoid the extra function call in case

Index: src/usr.bin/make/meta.h
diff -u src/usr.bin/make/meta.h:1.10 src/usr.bin/make/meta.h:1.11
--- src/usr.bin/make/meta.h:1.10	Sat Apr  3 11:08:40 2021
+++ src/usr.bin/make/meta.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*      $NetBSD: meta.h,v 1.10 2021/04/03 11:08:40 rillig Exp $ */
+/*      $NetBSD: meta.h,v 1.11 2021/12/15 09:53:41 rillig Exp $ */
 
 /*
  * Things needed for 'meta' mode.
@@ -46,13 +46,13 @@ void meta_mode_init(const char *);
 void meta_job_start(struct Job *, GNode *);
 void meta_job_child(struct Job *);
 void meta_job_parent(struct Job *, pid_t);
-int  meta_job_fd(struct Job *);
-int  meta_job_event(struct Job *);
+int  meta_job_fd(struct Job *) MAKE_ATTR_USE;
+int  meta_job_event(struct Job *) MAKE_ATTR_USE;
 void meta_job_error(struct Job *, GNode *, bool, int);
 void meta_job_output(struct Job *, char *, const char *);
 int  meta_cmd_finish(void *);
 int  meta_job_finish(struct Job *);
-bool meta_oodate(GNode *, bool);
+bool meta_oodate(GNode *, bool) MAKE_ATTR_USE;
 void meta_compat_start(void);
 void meta_compat_child(void);
 void meta_compat_parent(pid_t);

Index: src/usr.bin/make/metachar.h
diff -u src/usr.bin/make/metachar.h:1.17 src/usr.bin/make/metachar.h:1.18
--- src/usr.bin/make/metachar.h:1.17	Mon Jun 21 18:54:41 2021
+++ src/usr.bin/make/metachar.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: metachar.h,v 1.17 2021/06/21 18:54:41 rillig Exp $	*/
+/*	$NetBSD: metachar.h,v 1.18 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 2015 The NetBSD Foundation, Inc.
@@ -35,13 +35,13 @@
 
 extern const unsigned char _metachar[];
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 is_shell_metachar(char c)
 {
 	return _metachar[c & 0x7f] != 0;
 }
 
-MAKE_INLINE bool
+MAKE_INLINE bool MAKE_ATTR_USE
 needshell(const char *cmd)
 {
 	while (!is_shell_metachar(*cmd) && *cmd != ':' && *cmd != '=')

Index: src/usr.bin/make/nonints.h
diff -u src/usr.bin/make/nonints.h:1.218 src/usr.bin/make/nonints.h:1.219
--- src/usr.bin/make/nonints.h:1.218	Mon Dec 13 00:33:33 2021
+++ src/usr.bin/make/nonints.h	Wed Dec 15 09:53:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: nonints.h,v 1.218 2021/12/13 00:33:33 rillig Exp $	*/
+/*	$NetBSD: nonints.h,v 1.219 2021/12/15 09:53:41 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -82,8 +82,8 @@ void Arch_TouchLib(GNode *);
 void Arch_UpdateMTime(GNode *gn);
 void Arch_UpdateMemberMTime(GNode *gn);
 void Arch_FindLib(GNode *, SearchPath *);
-bool Arch_LibOODate(GNode *);
-bool Arch_IsLib(GNode *);
+bool Arch_LibOODate(GNode *) MAKE_ATTR_USE;
+bool Arch_IsLib(GNode *) MAKE_ATTR_USE;
 
 /* compat.c */
 int Compat_RunCommand(const char *, GNode *, StringListNode *);
@@ -91,21 +91,21 @@ void Compat_Run(GNodeList *);
 void Compat_Make(GNode *, GNode *);
 
 /* cond.c */
-CondEvalResult Cond_EvalCondition(const char *, bool *);
-CondEvalResult Cond_EvalLine(const char *);
+CondEvalResult Cond_EvalCondition(const char *, bool *) MAKE_ATTR_USE;
+CondEvalResult Cond_EvalLine(const char *) MAKE_ATTR_USE;
 void Cond_restore_depth(unsigned int);
-unsigned int Cond_save_depth(void);
+unsigned int Cond_save_depth(void) MAKE_ATTR_USE;
 
 /* dir.c; see also dir.h */
 
-MAKE_INLINE const char *
+MAKE_INLINE const char * MAKE_ATTR_USE
 str_basename(const char *pathname)
 {
 	const char *lastSlash = strrchr(pathname, '/');
 	return lastSlash != NULL ? lastSlash + 1 : pathname;
 }
 
-MAKE_INLINE SearchPath *
+MAKE_INLINE SearchPath * MAKE_ATTR_USE
 SearchPath_New(void)
 {
 	SearchPath *path = bmake_malloc(sizeof *path);
@@ -116,8 +116,8 @@ SearchPath_New(void)
 void SearchPath_Free(SearchPath *);
 
 /* for.c */
-int For_Eval(const char *);
-bool For_Accum(const char *);
+int For_Eval(const char *) MAKE_ATTR_USE;
+bool For_Accum(const char *) MAKE_ATTR_USE;
 void For_Run(int);
 
 /* job.c */
@@ -125,16 +125,16 @@ void JobReapChild(pid_t, int, bool);
 
 /* main.c */
 void Main_ParseArgLine(const char *);
-char *Cmd_Exec(const char *, const char **);
+char *Cmd_Exec(const char *, const char **) MAKE_ATTR_USE;
 void Error(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2);
 void Fatal(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2) MAKE_ATTR_DEAD;
 void Punt(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2) MAKE_ATTR_DEAD;
 void DieHorribly(void) MAKE_ATTR_DEAD;
 void Finish(int) MAKE_ATTR_DEAD;
-int eunlink(const char *);
+int eunlink(const char *) MAKE_ATTR_USE;
 void execDie(const char *, const char *);
-char *getTmpdir(void);
-bool ParseBoolean(const char *, bool);
+char *getTmpdir(void) MAKE_ATTR_USE;
+bool ParseBoolean(const char *, bool) MAKE_ATTR_USE;
 char *cached_realpath(const char *, char *);
 
 /* parse.c */
@@ -158,13 +158,13 @@ typedef struct VarAssign {
 typedef char *(*ReadMoreProc)(void *, size_t *);
 
 void Parse_Error(ParseErrorLevel, const char *, ...) MAKE_ATTR_PRINTFLIKE(2, 3);
-bool Parse_IsVar(const char *, VarAssign *out_var);
+bool Parse_IsVar(const char *, VarAssign *out_var) MAKE_ATTR_USE;
 void Parse_Var(VarAssign *, GNode *);
 void Parse_AddIncludeDir(const char *);
 void Parse_File(const char *, int);
 void Parse_PushInput(const char *, int, int, ReadMoreProc, void *);
 void Parse_MainName(GNodeList *);
-int Parse_NumErrors(void);
+int Parse_NumErrors(void) MAKE_ATTR_USE;
 
 
 /* suff.c */
@@ -172,42 +172,42 @@ void Suff_Init(void);
 void Suff_End(void);
 
 void Suff_ClearSuffixes(void);
-bool Suff_IsTransform(const char *);
+bool Suff_IsTransform(const char *) MAKE_ATTR_USE;
 GNode *Suff_AddTransform(const char *);
 void Suff_EndTransform(GNode *);
 void Suff_AddSuffix(const char *, GNode **);
-SearchPath *Suff_GetPath(const char *);
+SearchPath *Suff_GetPath(const char *) MAKE_ATTR_USE;
 void Suff_ExtendPaths(void);
 void Suff_AddInclude(const char *);
 void Suff_AddLib(const char *);
 void Suff_FindDeps(GNode *);
-SearchPath *Suff_FindPath(GNode *);
+SearchPath *Suff_FindPath(GNode *) MAKE_ATTR_USE;
 void Suff_SetNull(const char *);
 void Suff_PrintAll(void);
-char *Suff_NamesStr(void);
+char *Suff_NamesStr(void) MAKE_ATTR_USE;
 
 /* targ.c */
 void Targ_Init(void);
 void Targ_End(void);
 
 void Targ_Stats(void);
-GNodeList *Targ_List(void);
-GNode *GNode_New(const char *);
-GNode *Targ_FindNode(const char *);
-GNode *Targ_GetNode(const char *);
-GNode *Targ_NewInternalNode(const char *);
+GNodeList *Targ_List(void) MAKE_ATTR_USE;
+GNode *GNode_New(const char *) MAKE_ATTR_USE;
+GNode *Targ_FindNode(const char *) MAKE_ATTR_USE;
+GNode *Targ_GetNode(const char *) MAKE_ATTR_USE;
+GNode *Targ_NewInternalNode(const char *) MAKE_ATTR_USE;
 GNode *Targ_GetEndNode(void);
 void Targ_FindList(GNodeList *, StringList *);
-bool Targ_Precious(const GNode *);
+bool Targ_Precious(const GNode *) MAKE_ATTR_USE;
 void Targ_SetMain(GNode *);
 void Targ_PrintCmds(GNode *);
 void Targ_PrintNode(GNode *, int);
 void Targ_PrintNodes(GNodeList *, int);
-const char *Targ_FmtTime(time_t);
+const char *Targ_FmtTime(time_t) MAKE_ATTR_USE;
 void Targ_PrintType(GNodeType);
 void Targ_PrintGraph(int);
 void Targ_Propagate(void);
-const char *GNodeMade_Name(GNodeMade);
+const char *GNodeMade_Name(GNodeMade) MAKE_ATTR_USE;
 
 /* var.c */
 void Var_Init(void);
@@ -317,10 +317,10 @@ void Var_SetWithFlags(GNode *, const cha
 void Var_SetExpandWithFlags(GNode *, const char *, const char *, VarSetFlags);
 void Var_Append(GNode *, const char *, const char *);
 void Var_AppendExpand(GNode *, const char *, const char *);
-bool Var_Exists(GNode *, const char *);
-bool Var_ExistsExpand(GNode *, const char *);
-FStr Var_Value(GNode *, const char *);
-const char *GNode_ValueDirect(GNode *, const char *);
+bool Var_Exists(GNode *, const char *) MAKE_ATTR_USE;
+bool Var_ExistsExpand(GNode *, const char *) MAKE_ATTR_USE;
+FStr Var_Value(GNode *, const char *) MAKE_ATTR_USE;
+const char *GNode_ValueDirect(GNode *, const char *) MAKE_ATTR_USE;
 VarParseResult Var_Parse(const char **, GNode *, VarEvalMode, FStr *);
 VarParseResult Var_Subst(const char *, GNode *, VarEvalMode, char **);
 void Var_Stats(void);

Reply via email to