OSDN Git Service

cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Mar 2001 11:48:38 +0000 (11:48 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 2 Mar 2001 11:48:38 +0000 (11:48 +0000)
* typeck.c (build_static_cast): Allow enum to enum conversions
as per DR 128.
testsuite:
* g++.old-deja/g++.other/enum3.C: New test.

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

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

index af98592..389b9fc 100644 (file)
@@ -1,5 +1,10 @@
 2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
 
+       * typeck.c (build_static_cast): Allow enum to enum conversions
+       as per DR 128.
+
+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.
 
index f0d70ce..8b87342 100644 (file)
@@ -5093,6 +5093,13 @@ build_static_cast (type, expr)
           && TREE_CODE (type) != FUNCTION_TYPE
           && can_convert (intype, strip_all_pointer_quals (type)))
     ok = 1;
+  else if (TREE_CODE (intype) == ENUMERAL_TYPE
+           && TREE_CODE (type) == ENUMERAL_TYPE)
+    /* DR 128: "A value of integral _or enumeration_ type can be explicitly
+       converted to an enumeration type."
+       The integral to enumeration will be accepted by the previous clause.
+       We need to explicitly check for enumeration to enumeration.  */
+    ok = 1;
 
   /* [expr.static.cast]
 
index e0b9178..94aa892 100644 (file)
@@ -1,5 +1,9 @@
 2001-03-02  Nathan Sidwell  <nathan@codesourcery.com>
 
+       * g++.old-deja/g++.other/enum3.C: New test.
+
+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>
diff --git a/gcc/testsuite/g++.old-deja/g++.other/enum3.C b/gcc/testsuite/g++.old-deja/g++.other/enum3.C
new file mode 100644 (file)
index 0000000..c4303f6
--- /dev/null
@@ -0,0 +1,14 @@
+// Build don't link:
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 28 Feb 2001 <nathan@codesourcery.com>
+
+// Bug 338 and DR 128. Allow static cast to convert between enums.
+
+enum E1 {e1};
+enum E2 {e2};
+
+E2 Foo (E1 e)
+{
+  return static_cast <E2> (e);
+}