From 98979fe0b06dbc0c776d5f040762aab17add4914 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 11 Jan 2001 11:37:15 +0000 Subject: [PATCH] decl.c (grokparms): Unobfuscate and get correct diagnostic for parameters with pointers to arrays... cp: * decl.c (grokparms): Unobfuscate and get correct diagnostic for parameters with pointers to arrays of unknown bound. From-SVN: r38901 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 19 +++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 31d2d1229a1..526424fd77a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-01-11 Nathan Sidwell + + * decl.c (grokparms): Unobfuscate and get correct diagnostic for + parameters with pointers to arrays of unknown bound. + 2001-01-11 Nathan Sidwell * parse.y (template_parm_header, template_spec_header): New diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index dfe69acb6a3..66a285c6709 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -11907,15 +11907,22 @@ grokparms (first_parm) { /* [dcl.fct]/6, parameter types cannot contain pointers (references) to arrays of unknown bound. */ - tree t = type; + tree t = TREE_TYPE (type); + int ptr = TYPE_PTR_P (type); - while (POINTER_TYPE_P (t) - || (TREE_CODE (t) == ARRAY_TYPE - && TYPE_DOMAIN (t) != NULL_TREE)) - t = TREE_TYPE (t); + while (1) + { + if (TYPE_PTR_P (t)) + ptr = 1; + else if (TREE_CODE (t) != ARRAY_TYPE) + break; + else if (!TYPE_DOMAIN (t)) + break; + t = TREE_TYPE (t); + } if (TREE_CODE (t) == ARRAY_TYPE) cp_error ("parameter `%D' includes %s to array of unknown bound `%T'", - decl, TYPE_PTR_P (type) ? "pointer" : "reference", t); + decl, ptr ? "pointer" : "reference", t); } DECL_ARG_TYPE (decl) = TREE_TYPE (decl);