cp: * pt.c (instantiate_class_template): Set location before substuting bases.

cp:	* pt.c (instantiate_class_template): Set location before
	substuting bases.
testsuite:
	* g++.dg/template/error2.C: New test.
	* g++.dg/lookup/using7.C: Adjust errors
	* g++.old-deja/g++.pt/crash36.C: Likewise.
	* g++.old-deja/g++.pt/derived3.C: Likewise.

From-SVN: r70476
This commit is contained in:
Nathan Sidwell 2003-08-15 10:46:51 +00:00 committed by Nathan Sidwell
parent 4f7847cab9
commit 68ea098a05
7 changed files with 50 additions and 6 deletions

View File

@ -1,5 +1,8 @@
2003-08-15 Nathan Sidwell <nathan@codesourcery.com>
* pt.c (instantiate_class_template): Set location before
substuting bases.
* decl.c (make_typename_type): Use my_friendly_assert.
* pt.c (tsubst_aggr_type): Rearrange context substitution.

View File

@ -5137,6 +5137,10 @@ instantiate_class_template (tree type)
SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
}
/* Set the input location to the template definition. This is needed
if tsubsting causes an error. */
input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern));
TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);

View File

@ -1,3 +1,10 @@
2003-08-15 Nathan Sidwell <nathan@codesourcery.com>
* g++.dg/template/error2.C: New test.
* g++.dg/lookup/using7.C: Adjust errors
* g++.old-deja/g++.pt/crash36.C: Likewise.
* g++.old-deja/g++.pt/derived3.C: Likewise.
2003-08-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.c-torture/execute/builtins/lib/strcat.c: New.

View File

@ -4,7 +4,7 @@ template <typename T, bool=T::X> struct A
};
template <typename T> struct B : A<T>
{
{ // { dg-error "" }
using A<T>::i; // { dg-error "" }
};

View File

@ -0,0 +1,28 @@
// { dg-do compile }
// Copyright (C) 2003 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 14 Aug 2003 <nathan@codesourcery.com>
// instantiated from did not indicate the nested class
template<class T> struct X
{
T m; // { dg-error "" "" }
};
template<class T >
struct Derived
{
class Nested : public X<T>
{ // { dg-error "instantiated"
};
Nested m; // { dg-error "instantiated" "" }
void Foo ();
};
void Foo (Derived<void> &x)
{
x.Foo (); // { dg-error "instantiated" "" }
}

View File

@ -14,7 +14,7 @@ struct iterator {
template <class Iterator>
struct reverse_iterator : public
iterator<typename iterator_traits<Iterator>::iterator_category> {
iterator<typename iterator_traits<Iterator>::iterator_category> { // { dg-error "" } no type iterator_category
protected:
Iterator current;

View File

@ -1,14 +1,16 @@
// { dg-do assemble }
// { dg-do compile }
// by Paul Burchard <burchard@pobox.com>, Level Set Systems, Inc.
// Copyright (C) 1999, 2002 Free Software Foundation
template<class T>
class X {
class Y : public T {};
Y y; // { dg-error "" } invalid base type
class Y : public T
{ // { dg-error "base type .* fails to be" "" }
};
Y y; // { dg-error "instantiated" "" }
};
int main() {
X<int> x; // { dg-error "" } instantiated
X<int> x; // { dg-error "instantiated" "" }
}