2010-01-10 Doug Kwan <dougkwan@google.com>
authorDoug Kwan <dougkwan@google.com>
Mon, 11 Jan 2010 07:39:36 +0000 (07:39 +0000)
committerDoug Kwan <dougkwan@google.com>
Mon, 11 Jan 2010 07:39:36 +0000 (07:39 +0000)
* options.h (DEFINE_var): Use parentheses around argument varname__
in macro body to avoid any unintended subsequent substitutions.

gold/ChangeLog
gold/options.h

index ddf509088bfcdb5411562193a01f02cef04570fa..dd5688cde957cd9c6c209250f5e300293521a0bc 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-10  Doug Kwan  <dougkwan@google.com>
+
+       * options.h (DEFINE_var): Use parentheses around argument varname__
+       in macro body to avoid any unintended subsequent substitutions.
+
 2010-01-10  Ian Lance Taylor  <iant@google.com>
 
        * resolve.cc (Symbol_table::resolve): Add symbols to list of ODR
index b22060afa16f4a4336c89d99b80a49080079cda7..ab4a9e6ccb0b94982e996dd206e6a873c01383ac 100644 (file)
@@ -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                                                                       \