Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Dec 2015 06:25:52 +0000
From:      bugzilla-noreply@freebsd.org
To:        freebsd-ppc@FreeBSD.org
Subject:   [Bug 205394] lang/gcc49, lang/gcc5, devel/powerpc64-gcc on powerpc64: lib32's libedit fails to compile, 10 line source shows the problem
Message-ID:  <bug-205394-21@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=205394

            Bug ID: 205394
           Summary: lang/gcc49, lang/gcc5, devel/powerpc64-gcc on
                    powerpc64: lib32's libedit fails to compile, 10 line
                    source shows the problem
           Product: Ports & Packages
           Version: Latest
          Hardware: ppc
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: Individual Port(s)
          Assignee: bapt@FreeBSD.org
          Reporter: markmi@dsl-only.net
                CC: freebsd-ppc@FreeBSD.org
                CC: freebsd-ppc@FreeBSD.org
             Flags: maintainer-feedback?(bapt@FreeBSD.org)
          Assignee: bapt@FreeBSD.org

The following simple example shows how/why buildworld for lib32 on powerpc64
fails to compile libedit.

lang/gcc49, lang/gcc5, and devel/powerpc64-gcc all fail to compile the
following "main.c" for -m32 on powerpc64.

#include "/usr/include/stddef.h"

const wchar_t* test(const wchar_t* p) { return p; }

int main(void)
{
    const wchar_t* wcpt      = test(L"test");
    const wchar_t  wcarray[] = L"test";
    return 0;
}

For "gcc49 -m32 main.c" the result is:

# gcc49 -m32 main.c
main.c: In function 'main':
main.c:7:37: warning: passing argument 1 of 'test' from incompatible pointer
type
     const wchar_t* wcpt      = test(L"test");
                                     ^
main.c:3:16: note: expected 'const wchar_t *' but argument is of type 'long int
*'
 const wchar_t* test(const wchar_t* p) { return p; }
                ^
main.c:8:5: error: array of inappropriate type initialized from string constant
     const wchar_t  wcarray[] = L"test";
     ^

gcc5 and powerpc64-gcc get the same.

A possible fix via an addition to lang/gcc5's and devel/powerpc64-gcc's
patch-gcc-freebsd-powerpc64 would look like (tabs likely not preserved):

+@@ -304,7 +317,7 @@
+ 
+ /* rs6000.h gets this wrong for FreeBSD.  We use the GCC defaults instead. 
*/
+ #undef WCHAR_TYPE
+-#define    WCHAR_TYPE      (TARGET_64BIT ? "int" : "long int")
++#define    WCHAR_TYPE      "int"
+ #undef  WCHAR_TYPE_SIZE
+ #define WCHAR_TYPE_SIZE 32
+ 

It appears that lang/gcc49, lang/gcc5-devel, and lang/gcc6-devel do not have a
patch-gcc-freebsd-powerpc64 (yet?). Nor lang/gcc48 or older. At least for gcc49
the content of a patch for this issue could be similar from what I can see.
I've not looked at the details for the others.

Note: FreeBSD for powerpc64 and its lib32 context define ___wchar_t as int:

# grep wchar_t /usr/include/machine/_types.h                                   
                                                                               
                         typedef    int        ___wchar_t;
#define    __WCHAR_MIN    __INT_MIN    /* min value for a wchar_t */
#define    __WCHAR_MAX    __INT_MAX    /* max value for a wchar_t */

-- 
You are receiving this mail because:
You are on the CC list for the bug.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-205394-21>