mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-05 01:34:12 +08:00
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:
parent
4f7847cab9
commit
68ea098a05
@ -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.
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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 "" }
|
||||
};
|
||||
|
||||
|
28
gcc/testsuite/g++.dg/template/error2.C
Normal file
28
gcc/testsuite/g++.dg/template/error2.C
Normal 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" "" }
|
||||
}
|
@ -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;
|
||||
|
||||
|
@ -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" "" }
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user