From 7eeb553cec1598b3cd5307f8be190af8bf155651 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 2 Mar 2001 11:48:38 +0000 Subject: [PATCH] typeck.c (build_static_cast): Allow enum to enum conversions as per DR 128. cp: * typeck.c (build_static_cast): Allow enum to enum conversions as per DR 128. testsuite: * g++.old-deja/g++.other/enum3.C: New test. From-SVN: r40187 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 7 +++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.old-deja/g++.other/enum3.C | 14 ++++++++++++++ 4 files changed, 30 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/enum3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index af98592afef..389b9fc2dd4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-03-02 Nathan Sidwell + + * typeck.c (build_static_cast): Allow enum to enum conversions + as per DR 128. + 2001-03-02 Nathan Sidwell * class.c (check_field_decls): Pointers to member do not a diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index f0d70ce4f47..8b873422789 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -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] diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e0b9178076d..94aa89216e9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-03-02 Nathan Sidwell + + * g++.old-deja/g++.other/enum3.C: New test. + 2001-03-02 Nathan Sidwell * g++.old-deja/g++.other/pod1.C: New test. 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 index 00000000000..c4303f6f46c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/enum3.C @@ -0,0 +1,14 @@ +// Build don't link: + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 28 Feb 2001 + +// 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 (e); +} -- 2.30.2