aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@yorick.cygnus.com>1998-07-24 14:02:32 +0000
committerJason Merrill <jason@gcc.gnu.org>1998-07-24 10:02:32 -0400
commitd1fec18074669d313b92a54c9ea48e3c6f9f3cf3 (patch)
tree69da344414e3f77083f6b34e73e2d717311e08f3 /gcc
parente2bc7d00a61baee21520eb43f0f2fb87623af325 (diff)
downloadgcc-d1fec18074669d313b92a54c9ea48e3c6f9f3cf3.zip
gcc-d1fec18074669d313b92a54c9ea48e3c6f9f3cf3.tar.gz
gcc-d1fec18074669d313b92a54c9ea48e3c6f9f3cf3.tar.bz2
* pt.c (coerce_template_parms): Also complain about local enums.
From-SVN: r21363
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/NEWS16
-rw-r--r--gcc/cp/pt.c6
3 files changed, 19 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ebf049e..7a479dd 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
1998-07-24 Jason Merrill <jason@yorick.cygnus.com>
+ * pt.c (coerce_template_parms): Also complain about local enums.
+
* cp-tree.h: Add prototype for set_identifier_local_value.
* decl.c (set_identifier_local_value_with_scope): Make static,
prototype.
diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS
index ebfe314..faa48d9 100644
--- a/gcc/cp/NEWS
+++ b/gcc/cp/NEWS
@@ -1,5 +1,9 @@
*** Changes since EGCS 1.0:
+* Namespaces are fully supported. The library has not yet been converted
+ to use namespace std, however, and the old std-faking code is still on by
+ default. To turn it off, you can use -fhonor-std.
+
* Massive template improvements:
+ member template classes are supported.
+ template friends are supported.
@@ -9,8 +13,9 @@
* operator new now throws bad_alloc where appropriate.
-* Exception handling is now thread safe, and supports nested
- exceptions and placement delete.
+* Exception handling is now thread safe, and supports nested exceptions and
+ placement delete. Exception handling overhead on x86 is much lower with
+ GNU as 2.9.
* protected virtual inheritance is now supported.
@@ -20,6 +25,13 @@
* For class D derived from B which has a member 'int i', &D::i is now of
type 'int B::*' instead of 'int D::*'.
+* An _experimental_ new ABI for g++ can be turned on with -fnew-abi. The
+ current features of this are more efficient allocation of base classes
+ (including the empty base optimization), and more compact mangling of C++
+ symbol names (which can be turned on separately with -fsquangle). This
+ ABI is subject to change without notice, so don't use it for anything
+ that you don't want to rebuild with every release of the compiler.
+
*** Changes in EGCS 1.0:
* A public review copy of the December 1996 Draft of the ISO/ANSI C++
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index eaf73ef..9c72431 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -2659,11 +2659,11 @@ coerce_template_parms (parms, arglist, in_decl,
if (! processing_template_decl)
{
tree t = target_type (val);
- if (TREE_CODE (t) != TYPENAME_TYPE
- && IS_AGGR_TYPE (t)
+ if (((IS_AGGR_TYPE (t) && TREE_CODE (t) != TYPENAME_TYPE)
+ || TREE_CODE (t) == ENUMERAL_TYPE)
&& decl_function_context (TYPE_MAIN_DECL (t)))
{
- cp_error ("type `%T' composed from a local class is not a valid template-argument",
+ cp_error ("type `%T' composed from a local type is not a valid template-argument",
val);
return error_mark_node;
}