This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: libiberty doesn't build with a K+R compiler
- To: Mark Mitchell <mark at codesourcery dot com>, Daniel Berlin <dan at cgsoftware dot com>
- Subject: Re: libiberty doesn't build with a K+R compiler
- From: "Zack Weinberg" <zackw at Stanford dot EDU>
- Date: Mon, 7 May 2001 23:14:15 -0700
- Cc: gcc-patches at gcc dot gnu dot org
- References: <20010507091809.H32266@stanford.edu> <20010507211341G.mitchell@codesourcery.com>
On Mon, May 07, 2001 at 09:13:41PM -0700, Mark Mitchell wrote:
>
> Zack --
>
> The obvious patches are pre-approved, if you want to go for it. :-)
I suppose I asked for that...
The problems were in demangle.h, cp-demangle.c, ternary.[ch]. I
constified some of the routines in ternary.c while I was at it.
[N.B. 'const ternary_tree' is NOT the same thing as 'const
ternary_node *'. The former is a constant pointer to variable data,
the latter is a variable pointer to constant data, which is what we want.]
Tested with 'make stage1_build' on i686-linux and hppa-hpux11, the
latter with the K+R compiler. The whole patch has been applied to
mainline, the demangler bits to branch (ternary.[ch] don't exist on
the branch).
--
zw But the voices in my head are what keeps me sane.
-- Shweta Narayan
* demangle.h: Use PARAMS for all prototypes.
* ternary.h: Use PARAMS for all prototypes. Use PTR, not void *.
Make arguments constant where possible.
* cp-demangle.c (demangle_v3_with_details,
is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style
function definition.
* ternary.c: Use K+R style function definitions. Use PTR, not
void *. Make arguments constant where possible.
===================================================================
Index: include/demangle.h
--- include/demangle.h 2001/03/21 19:37:53 1.15
+++ include/demangle.h 2001/05/08 06:05:23
@@ -139,7 +139,8 @@ enum gnu_v3_ctor_kinds {
in the G++ V3 ABI demangling style. Specifically, return an `enum
gnu_v3_ctor_kinds' value indicating what kind of constructor
it is. */
-extern enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name);
+extern enum gnu_v3_ctor_kinds
+ is_gnu_v3_mangled_ctor PARAMS ((const char *name));
enum gnu_v3_dtor_kinds {
@@ -152,6 +153,7 @@ enum gnu_v3_dtor_kinds {
in the G++ V3 ABI demangling style. Specifically, return an `enum
gnu_v3_dtor_kinds' value, indicating what kind of destructor
it is. */
-extern enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name);
+extern enum gnu_v3_dtor_kinds
+ is_gnu_v3_mangled_dtor PARAMS ((const char *name));
#endif /* DEMANGLE_H */
===================================================================
Index: include/ternary.h
--- include/ternary.h 2001/04/16 15:30:16 1.1
+++ include/ternary.h 2001/05/08 06:05:23
@@ -38,13 +38,14 @@ ternary_node;
already there, and replace is 0.
Otherwise, replaces if it it exists, inserts if it doesn't, and
returns the data you passed in. */
-void *ternary_insert (ternary_tree *p, char *s, void *data, int replace);
+PTR ternary_insert PARAMS ((ternary_tree *p, const char *s,
+ PTR data, int replace));
/* Delete the ternary search tree rooted at P.
Does NOT delete the data you associated with the strings. */
-void ternary_cleanup (ternary_tree p);
+void ternary_cleanup PARAMS ((ternary_tree p));
/* Search the ternary tree for string S, returning the data associated
with it if found. */
-void *ternary_search (ternary_tree p, char *s);
+PTR ternary_search PARAMS ((const ternary_node *p, const char *s));
#endif
===================================================================
Index: libiberty/cp-demangle.c
--- libiberty/cp-demangle.c 2001/03/23 22:12:55 1.30
+++ libiberty/cp-demangle.c 2001/05/08 06:05:27
@@ -3819,7 +3819,8 @@ java_demangle_v3 (mangled)
zero, indicating that some error occurred, or a demangling_t
holding the results. */
static demangling_t
-demangle_v3_with_details (const char *name)
+demangle_v3_with_details (name)
+ const char *name;
{
demangling_t dm;
status_t status;
@@ -3857,7 +3858,8 @@ demangle_v3_with_details (const char *na
- '2' if NAME is a base object constructor, or
- '3' if NAME is a complete object allocating constructor. */
enum gnu_v3_ctor_kinds
-is_gnu_v3_mangled_ctor (const char *name)
+is_gnu_v3_mangled_ctor (name)
+ const char *name;
{
demangling_t dm = demangle_v3_with_details (name);
@@ -3878,7 +3880,8 @@ is_gnu_v3_mangled_ctor (const char *name
- '1' if NAME is a complete object destructor, or
- '2' if NAME is a base object destructor. */
enum gnu_v3_dtor_kinds
-is_gnu_v3_mangled_dtor (const char *name)
+is_gnu_v3_mangled_dtor (name)
+ const char *name;
{
demangling_t dm = demangle_v3_with_details (name);
===================================================================
Index: libiberty/ternary.c
--- libiberty/ternary.c 2001/04/16 15:30:17 1.1
+++ libiberty/ternary.c 2001/05/08 06:05:27
@@ -33,8 +33,12 @@
/* Non-recursive so we don't waste stack space/time on large
insertions. */
-void *
-ternary_insert (ternary_tree * root, char *s, void *data, int replace)
+PTR
+ternary_insert (root, s, data, replace)
+ ternary_tree *root;
+ const char *s;
+ PTR data;
+ int replace;
{
int diff;
ternary_tree curr, *pcurr;
@@ -54,7 +58,7 @@ ternary_insert (ternary_tree * root, cha
{
if (replace)
curr->eqkid = (ternary_tree) data;
- return (void *) curr->eqkid;
+ return (PTR) curr->eqkid;
}
pcurr = &(curr->eqkid);
}
@@ -94,7 +98,8 @@ ternary_insert (ternary_tree * root, cha
/* Free the ternary search tree rooted at p. */
void
-ternary_cleanup (ternary_tree p)
+ternary_cleanup (p)
+ ternary_tree p;
{
if (p)
{
@@ -107,10 +112,12 @@ ternary_cleanup (ternary_tree p)
}
/* Non-recursive find of a string in the ternary tree */
-void *
-ternary_search (ternary_tree p, char *s)
+PTR
+ternary_search (p, s)
+ const ternary_node *p;
+ const char *s;
{
- ternary_tree curr;
+ const ternary_node *curr;
int diff, spchar;
spchar = *s;
curr = p;
@@ -123,7 +130,7 @@ ternary_search (ternary_tree p, char *s)
if (diff == 0)
{
if (spchar == 0)
- return (void *) curr->eqkid;
+ return (PTR) curr->eqkid;
spchar = *++s;
curr = curr->eqkid;
}
@@ -139,8 +146,10 @@ ternary_search (ternary_tree p, char *s)
/* For those who care, the recursive version of the search. Useful if
you want a starting point for pmsearch or nearsearch. */
-static void *
-ternary_recursivesearch (ternary_tree p, char *s)
+static PTR
+ternary_recursivesearch (p, s)
+ const ternary_node *p;
+ const char *s;
{
if (!p)
return 0;
@@ -151,7 +160,7 @@ ternary_recursivesearch (ternary_tree p,
else
{
if (*s == 0)
- return (void *) p->eqkid;
+ return (PTR) p->eqkid;
return ternary_recursivesearch (p->eqkid, ++s);
}
}