method.c (implicitly_declare_fn): Increase alignment if member function pointer forma...
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 24 Jul 2007 18:32:48 +0000 (18:32 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 24 Jul 2007 18:32:48 +0000 (18:32 +0000)
* method.c (implicitly_declare_fn): Increase alignment if member
function pointer format requires it.

From-SVN: r126884

gcc/cp/ChangeLog
gcc/cp/method.c

index f0ea30b..456e587 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-24  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * method.c (implicitly_declare_fn): Increase alignment if member
+       function pointer format requires it.
+
 2007-07-24  Paolo Carlini  <pcarlini@suse.de>
 
        PR c++/29001
index 03f4908..543bb5f 100644 (file)
@@ -1078,6 +1078,14 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p)
       DECL_ASSIGNMENT_OPERATOR_P (fn) = 1;
       SET_OVERLOADED_OPERATOR_CODE (fn, NOP_EXPR);
     }
+  
+  /* If pointers to member functions use the least significant bit to
+     indicate whether a function is virtual, ensure a pointer
+     to this function will have that bit clear.  */
+  if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
+      && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
+    DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
+
   /* Create the explicit arguments.  */
   if (rhs_parm_type)
     {