[comp.lang.c++] Buggs in AT&T C++ 2.1 on Sun SPARC

zq@eecg.toronto.edu (Qing Zheng) (03/25/91)

  The following could be the buggs of AT&T C++ 2.1 on Sun SPARC (SunOs 4.1)

  1) return type conflict for alloca()

  ---- C++ header file alloca.h --------

    /*ident	"@(#)C++env:incl-master/proto-headers/alloca.h	1.2" */

    #ifndef __ALLOCA_H
    #define __ALLOCA_H

    /*	@(#)alloca.h	1.4	88/08/19	SMI	*/

    #ifndef _alloca_h
    #define _alloca_h

    #if defined(sparc)
    # define alloca(x) __builtin_alloca(x)
    #endif

    #endif /*!_alloca_h*/
     

    extern "C" {
	    void *__builtin_alloca(int);
    }     /* ^^^^^ the return type is void* */
    #endif

   ---- C++ header file malloc.h ------

    /*ident	"@(#)C++env:incl-master/proto-headers/malloc.h	1.1" */

    #ifndef __MALLOC_H
    #define __MALLOC_H
    ......
    extern "C" {
	    char *malloc(size_t);
	    void free(void*);
	    void cfree(void*);
	    char *realloc(void*, size_t);
	    char *calloc(unsigned, size_t);
	    int mallopt(int, int);
	    struct mallinfo mallinfo(int);
	    char *memalign(unsigned, size_t);
	    char *valloc(size_t);
	    int malloc_debug(int);
	    int malloc_verify();
	    char *alloca(int);
    }	/*  ^^^^^^ here the return type is char* */

    #endif

  2) Since in the SunOS 4.1 header file /usr/include/unistd.h already
     constains some external function declaration such as
		...
		extern char    *getlogin(/* void */);
		...
    these declarations will also be contained in the C++ header file unistd.h
    after being expanded during 'make scratch'. The correct declaration should
    be :
	extern "C" {
		...
		char    *getlogin();
		...
	}
    instead of  
                extern char    *getlogin(/* void */);
    which is a C++ function declaration. Actually this function is already
    declared in C++ header file stdlib.h as
        extern "C" {
                ...
                char    *getlogin();
                ...
        }

   Any idea of how to fix these buggs properly ?

   Thanks in advance.


----Qing