/*
- * Forcing a function not to be inlined can be useful if it's the slow-path of
- * a performance critical function, or should be visible in profiles to allow
- * for proper cost attribution.
+ * Forcing a function not to be inlined can be useful if it's the slow path of
+ * a performance-critical function, or should be visible in profiles to allow
+ * for proper cost attribution. Note that unlike the pg_attribute_XXX macros
+ * above, this should be placed before the function's return type and name.
*/
-/* GCC, Sunpro and XLC support noinline via __attribute */
-#if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__)
+/* GCC, Sunpro and XLC support noinline via __attribute__ */
+#if (defined(__GNUC__) && __GNUC__ > 2) || defined(__SUNPRO_C) || defined(__IBMC__)
#define pg_noinline __attribute__((noinline))
/* msvc via declspec */
#elif defined(_MSC_VER)