re PR c++/27102 (ICE with invalid class name in function template)
PR c++/27102 * decl.c (grokdeclarator): Robustify checks for defining members of incomplete types. PR c++/27102 * g++.dg/template/crash49.C: New test. From-SVN: r113492
This commit is contained in:
parent
db40f6d4a1
commit
cc3281454e
4 changed files with 26 additions and 6 deletions
|
@ -1,5 +1,9 @@
|
|||
2006-05-02 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27102
|
||||
* decl.c (grokdeclarator): Robustify checks for defining members
|
||||
of incomplete types.
|
||||
|
||||
PR c++/27309
|
||||
* class.c (add_method): Call grok_special_member_properties.
|
||||
* decl.c (grokdeclarator): Don't call it here.
|
||||
|
|
|
@ -7722,12 +7722,19 @@ grokdeclarator (const cp_declarator *declarator,
|
|||
else if (/* If the qualifying type is already complete, then we
|
||||
can skip the following checks. */
|
||||
!COMPLETE_TYPE_P (ctype)
|
||||
/* If a function is being defined, then the qualifying
|
||||
type must be complete. The qualifying type may be
|
||||
incomplete for a declaration only if the qualifying
|
||||
type is one of the classes presently being defined,
|
||||
or if it is a dependent type. */
|
||||
&& (funcdef_flag
|
||||
&& (/* If the function is being defined, then
|
||||
qualifying type must certainly be complete. */
|
||||
funcdef_flag
|
||||
/* A friend declaration of "T::f" is OK, even if
|
||||
"T" is a template parameter. But, if this
|
||||
function is not a friend, the qualifying type
|
||||
must be a class. */
|
||||
|| (!friendp && !CLASS_TYPE_P (ctype))
|
||||
/* For a declaration, the type need not be
|
||||
complete, if either it is dependent (since there
|
||||
is no meaningful definition of complete in that
|
||||
case) or the qualifying class is currently being
|
||||
defined. */
|
||||
|| !(dependent_type_p (ctype)
|
||||
|| currently_open_class (ctype)))
|
||||
/* Check that the qualifying type is complete. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-05-02 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/27102
|
||||
* g++.dg/template/crash49.C: New test.
|
||||
|
||||
2006-05-02 Steve Ellcey <sje@cup.hp.com>
|
||||
|
||||
PR testsuite/27032
|
||||
|
|
4
gcc/testsuite/g++.dg/template/crash49.C
Normal file
4
gcc/testsuite/g++.dg/template/crash49.C
Normal file
|
@ -0,0 +1,4 @@
|
|||
// PR c++/27102
|
||||
|
||||
template <typename T>
|
||||
void T::foo; // { dg-error "invalid" }
|
Loading…
Add table
Reference in a new issue