aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/c.h11
-rw-r--r--src/include/utils/guc.h10
2 files changed, 16 insertions, 5 deletions
diff --git a/src/include/c.h b/src/include/c.h
index 4f16e589b3e..863a16c6a6c 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -145,6 +145,17 @@
#endif
/*
+ * pg_attribute_nonnull means the compiler should warn if the function is
+ * called with the listed arguments set to NULL. If no arguments are
+ * listed, the compiler should warn if any pointer arguments are set to NULL.
+ */
+#if __has_attribute (nonnull)
+#define pg_attribute_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
+#else
+#define pg_attribute_nonnull(...)
+#endif
+
+/*
* Append PG_USED_FOR_ASSERTS_ONLY to definitions of variables that are only
* used in assert-enabled builds, to avoid compiler warnings about unused
* variables in assert-disabled builds.
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index d5976ecbfb9..4d0920c42e2 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -307,7 +307,7 @@ extern void DefineCustomBoolVariable(const char *name,
int flags,
GucBoolCheckHook check_hook,
GucBoolAssignHook assign_hook,
- GucShowHook show_hook);
+ GucShowHook show_hook) pg_attribute_nonnull(1, 4);
extern void DefineCustomIntVariable(const char *name,
const char *short_desc,
@@ -320,7 +320,7 @@ extern void DefineCustomIntVariable(const char *name,
int flags,
GucIntCheckHook check_hook,
GucIntAssignHook assign_hook,
- GucShowHook show_hook);
+ GucShowHook show_hook) pg_attribute_nonnull(1, 4);
extern void DefineCustomRealVariable(const char *name,
const char *short_desc,
@@ -333,7 +333,7 @@ extern void DefineCustomRealVariable(const char *name,
int flags,
GucRealCheckHook check_hook,
GucRealAssignHook assign_hook,
- GucShowHook show_hook);
+ GucShowHook show_hook) pg_attribute_nonnull(1, 4);
extern void DefineCustomStringVariable(const char *name,
const char *short_desc,
@@ -344,7 +344,7 @@ extern void DefineCustomStringVariable(const char *name,
int flags,
GucStringCheckHook check_hook,
GucStringAssignHook assign_hook,
- GucShowHook show_hook);
+ GucShowHook show_hook) pg_attribute_nonnull(1, 4);
extern void DefineCustomEnumVariable(const char *name,
const char *short_desc,
@@ -356,7 +356,7 @@ extern void DefineCustomEnumVariable(const char *name,
int flags,
GucEnumCheckHook check_hook,
GucEnumAssignHook assign_hook,
- GucShowHook show_hook);
+ GucShowHook show_hook) pg_attribute_nonnull(1, 4);
extern void MarkGUCPrefixReserved(const char *className);