*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.33 2007/01/05 22:19:43 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/error/assert.c,v 1.34 2007/05/04 02:01:02 tgl Exp $
*
* NOTE
* This should eventually work with elog()
/*
* ExceptionalCondition - Handles the failure of an Assert()
+ *
+ * Note: this can't actually return, but we declare it as returning int
+ * because the TrapMacro() macro might get wonky otherwise.
*/
int
-ExceptionalCondition(char *conditionName,
- char *errorType,
- char *fileName,
+ExceptionalCondition(const char *conditionName,
+ const char *errorType,
+ const char *fileName,
int lineNumber)
{
if (!PointerIsValid(conditionName)
fileName, lineNumber);
}
+ /* Usually this shouldn't be needed, but make sure the msg went out */
+ fflush(stderr);
+
#ifdef SLEEP_ON_ASSERT
/*
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.184 2007/05/02 15:32:41 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.185 2007/05/04 02:01:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
errfinish(0);
}
+
+ /* We mustn't return... */
+ ExceptionalCondition("pg_re_throw tried to return", "FailedAssertion",
+ __FILE__, __LINE__);
+
+ /*
+ * Since ExceptionalCondition isn't declared noreturn because of
+ * TrapMacro(), we need this to keep gcc from complaining.
+ */
+ abort();
}
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1995, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/postgres.h,v 1.79 2007/04/06 04:21:44 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/postgres.h,v 1.80 2007/05/04 02:01:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
Trap(!(condition), "BadState")
#endif /* USE_ASSERT_CHECKING */
-extern int ExceptionalCondition(char *conditionName, char *errorType,
- char *fileName, int lineNumber);
+extern int ExceptionalCondition(const char *conditionName,
+ const char *errorType,
+ const char *fileName, int lineNumber);
/* ----------------------------------------------------------------
* Section 4: genbki macros used by catalog/pg_xxx.h files
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.85 2007/05/02 15:32:42 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/utils/elog.h,v 1.86 2007/05/04 02:01:02 tgl Exp $
*
*-------------------------------------------------------------------------
*/
error_context_stack = save_context_stack; \
} while (0)
+/*
+ * gcc understands __attribute__((noreturn)); for other compilers, insert
+ * a useless exit() call so that the compiler gets the point.
+ */
+#ifdef __GNUC__
#define PG_RE_THROW() \
pg_re_throw()
+#else
+#define PG_RE_THROW() \
+ (pg_re_throw(), exit(1))
+#endif
extern DLLIMPORT sigjmp_buf *PG_exception_stack;
extern void FreeErrorData(ErrorData *edata);
extern void FlushErrorState(void);
extern void ReThrowError(ErrorData *edata);
-extern void pg_re_throw(void);
+extern void pg_re_throw(void) __attribute__((noreturn));
/* GUC-configurable parameters */