#define SELECT_SIZE_ONLY(size)
#define ACCEPT_SIZE
#define ACCEPT_SIZE_ONLY
+#define ACCEPT_SIZE_EXPLICIT(size)
#define SELECT_SIZE_ENDIAN_NAME(size, big_endian) <size, big_endian>
#define SELECT_SIZE_ENDIAN(size, big_endian)
#define SELECT_SIZE_ENDIAN_ONLY(size, big_endian)
#define ACCEPT_SIZE_ENDIAN
#define ACCEPT_SIZE_ENDIAN_ONLY
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian)
#else // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
#define SELECT_SIZE_ONLY(size) Select_size<size>()
#define ACCEPT_SIZE , Select_size<size>
#define ACCEPT_SIZE_ONLY Select_size<size>
+#define ACCEPT_SIZE_EXPLICIT(size) , Select_size<size>
#define SELECT_SIZE_ENDIAN_NAME(size, big_endian)
#define SELECT_SIZE_ENDIAN(size, big_endian) \
Select_size_endian<size, big_endian>()
#define ACCEPT_SIZE_ENDIAN , Select_size_endian<size, big_endian>
#define ACCEPT_SIZE_ENDIAN_ONLY Select_size_endian<size, big_endian>
+#define ACCEPT_SIZE_ENDIAN_EXPLICIT(size, big_endian) \
+ , Select_size_endian<size, big_endian>
#endif // !defined(HAVE_MEMBER_TEMPLATE_SPECIFICATIONS)
{
class General_options;
+class Command_line;
class Input_argument_list;
class Dirsearch;
class Input_objects;
extern void
gold_nomem() ATTRIBUTE_NORETURN;
-// This function is called in cases which can not arise if the code is
-// written correctly.
-extern void
-gold_unreachable() ATTRIBUTE_NORETURN;
+// This macro and function are used in cases which can not arise if
+// the code is written correctly.
+
+#define gold_unreachable() \
+ (gold::do_gold_unreachable(__FILE__, __LINE__, __FUNCTION__))
+
+extern void do_gold_unreachable(const char*, int, const char*)
+ ATTRIBUTE_NORETURN;
+
+// Assertion check.
+
+#define gold_assert(expr) ((void)(!(expr) ? gold_unreachable(), 0 : 0))
// Queue up the first set of tasks.
extern void
queue_initial_tasks(const General_options&,
const Dirsearch&,
- const Input_argument_list&,
+ const Command_line&,
Workqueue*,
Input_objects*,
Symbol_table*,