OSDN Git Service

cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Mar 2001 11:44:57 +0000 (11:44 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Mar 2001 11:44:57 +0000 (11:44 +0000)
* class.c (check_field_decls): Pointers to member do not a
non-pod struct make, as per DR 148.
testsuite:
* g++.old-deja/g++.other/pod1.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40186 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.old-deja/g++.other/pod1.C [new file with mode: 0644]

index 78899b6..af98592 100644 (file)
@@ -1,5 +1,10 @@
 2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
 
+       * class.c (check_field_decls): Pointers to member do not a
+       non-pod struct make, as per DR 148.
+
+2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
+
        * call.c (joust): cp_pedwarn when using gnu extension concerning
        worst conversion sequences.
 
index 8af19c5..2fb75b2 100644 (file)
@@ -3594,10 +3594,9 @@ check_field_decls (t, access_decls, empty_p,
       if (DECL_MUTABLE_P (x) || TYPE_HAS_MUTABLE_P (type))
        CLASSTYPE_HAS_MUTABLE (t) = 1;
 
-      if (! pod_type_p (type)
-         /* For some reason, pointers to members are POD types themselves,
-            but are not allowed in POD structs.  Silly.  */
-         || TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
+      if (! pod_type_p (type))
+        /* DR 148 now allows pointers to members (which are POD themselves),
+           to be allowed in POD structs.  */
        CLASSTYPE_NON_POD_P (t) = 1;
 
       /* If any field is const, the structure type is pseudo-const.  */
index 6c43b68..e0b9178 100644 (file)
@@ -1,5 +1,9 @@
 2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
 
+       * g++.old-deja/g++.other/pod1.C: New test.
+
+2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
+
        * g++.old-deja/g++.ext/overload1.C: New test.
 
 2001-03-01  Nathan Sidwell  <nathan@codesourcery.com>
diff --git a/gcc/testsuite/g++.old-deja/g++.other/pod1.C b/gcc/testsuite/g++.old-deja/g++.other/pod1.C
new file mode 100644 (file)
index 0000000..c6faf0d
--- /dev/null
@@ -0,0 +1,21 @@
+// Build don't link:
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 28 Feb 2001 <nathan@codesourcery.com>
+
+// DR 148. Now allows pointer to members in POD struct.
+
+struct X
+{
+  int X::*m;
+  int (X::*f) ();
+};
+
+void Foo (int, ...);
+
+void Baz ()
+{
+  X x;
+  
+  Foo (1, x);
+}