From e96c574bdc02a1bda4fc708ae5d2233e3385f0af Mon Sep 17 00:00:00 2001 From: Doug Kwan Date: Mon, 11 Jan 2010 07:39:36 +0000 Subject: 2010-01-10 Doug Kwan * options.h (DEFINE_var): Use parentheses around argument varname__ in macro body to avoid any unintended subsequent substitutions. --- gold/ChangeLog | 5 +++++ gold/options.h | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'gold') diff --git a/gold/ChangeLog b/gold/ChangeLog index ddf5090..dd5688c 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2010-01-10 Doug Kwan + + * options.h (DEFINE_var): Use parentheses around argument varname__ + in macro body to avoid any unintended subsequent substitutions. + 2010-01-10 Ian Lance Taylor * resolve.cc (Symbol_table::resolve): Add symbols to list of ODR diff --git a/gold/options.h b/gold/options.h index b22060a..ab4a9e6 100644 --- a/gold/options.h +++ b/gold/options.h @@ -244,12 +244,18 @@ struct Struct_special : public Struct_var // var() and set_var() as General_options methods. Arguments as are // for the constructor for One_option. param_type__ is the same as // type__ for built-in types, and "const type__ &" otherwise. +// +// When we define the linker command option "assert", the macro argument +// varname__ of DEFINE_var below will be replaced by "assert". On Mac OSX +// assert.h is included implicitly by one of the library headers we use. To +// avoid unintended macro substitution of "assert()", we need to enclose +// varname__ with parenthese. #define DEFINE_var(varname__, dashes__, shortname__, default_value__, \ default_value_as_string__, helpstring__, helparg__, \ optional_arg__, type__, param_type__, parse_fn__) \ public: \ param_type__ \ - varname__() const \ + (varname__)() const \ { return this->varname__##_.value; } \ \ bool \ -- cgit v1.1