Hi!

----

The jcl parts of ast-open.20120-06-12 fail to build on Solaris 11/i386
with Sun Studio 12.1:
-- snip --
+ 1> jcl.req
+ cc -D_TS_ERRNO -D_REENTRANT -KPIC -xO4 '-xalias_level=std' -xspace
-Xa -xstrconst -z combreloc -xildoff -xcsi '-errtags=yes'
'-DSHOPT_CMDLIB_BLTIN=0' '-DSH_CMDLIB_DIR="/usr/ast/
bin"' 
'-DSHOPT_CMDLIB_HDR="/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/tmp_solaris_builtin_header.h"'
-DSHOPT_SYSRC '-D_map_libc=1' '-D_lib_socket=1' -lsoc
ket -lnsl 
-I/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl
-I- -I../../../include/ast -DDEBUG -D_PACKAGE_ast -c
/home/test001/ksh93/ast_ksh_201
20612/build_i386_64bit_extrabuiltins/src/lib/libjcl/open.c
+ cc -D_TS_ERRNO -D_REENTRANT -KPIC -xO4 '-xalias_level=std' -xspace
-Xa -xstrconst -z combreloc -xildoff -xcsi '-errtags=yes'
'-DSHOPT_CMDLIB_BLTIN=0' '-DSH_CMDLIB_DIR="/usr/ast/
bin"' 
'-DSHOPT_CMDLIB_HDR="/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/tmp_solaris_builtin_header.h"'
-DSHOPT_SYSRC '-D_map_libc=1' '-D_lib_socket=1' -lsoc
ket -lnsl 
-I/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl
-I- -I../../../include/ast -DDEBUG -D_PACKAGE_ast -c
/home/test001/ksh93/ast_ksh_201
20612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c
"/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c",
line 46: syntax error before or at: 18
"/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c",
line 46: warning: syntax error:  empty declaration
(E_EMPTY_DECLARATION)
"/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c",
line 817: warning: improper pointer/integer combination: op "="
(E_BAD_PTR_INT_COMBINATION)
"/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c",
line 1950: warning: improper pointer/integer combination: op "!="
(E_BAD_PTR_INT_COMBINATION)
"/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c",
line 1952: warning: improper pointer/integer combination: arg #4
(E_BAD_PTR_INT_COMB_ARG)
cc: acomp failed for
/home/test001/ksh93/ast_ksh_20120612/build_i386_64bit_extrabuiltins/src/lib/libjcl/parse.c
make [lib/libjcl]: *** exit code 2 making parse.o
-- snip --

The problem here is AFAIK the use of |SS| as symbol...
-- snip --
static char             SS[] = "//";
-- snip --
... because a system header defines this:
-- snip --
$ grep -r -E '#.*define[[:space:]]+SS[[:space:]]+' /usr/include/
/usr/include/sys/regset.h:#define       SS              18      /*
only stored on a privilege transition */
-- snip --
(this mess comes from the "i386 ABI supplement"... thanks likely go to
Intel... ;-/ ).

There are two ways to fix it:
1. #undef SS in parse.c
2. Rename the variable (because _uppercase_ 1/2/3-letter symbols are
always in danger from being trampled in some way by system includes)

I've opted for [2] because the all-uppercase symbols are really
calling for trouble...

... attached (as "astopen20120612_jcl_parse001.diff.txt") is the patch...

----

Bye,
Roland

-- 
  __ .  . __
 (o.\ \/ /.o) roland.ma...@nrubsig.org
  \__\/\/__/  MPEG specialist, C&&JAVA&&Sun&&Unix programmer
  /O /==\ O\  TEL +49 641 3992797
 (;O/ \/ \O;)
--- src/lib/libjcl/parse.c      Wed Nov 15 09:56:41 2006
+++ src/lib/libjcl/parse.c      Mon Jun 18 01:25:04 2012
@@ -41,10 +41,10 @@
 
 static char            dummy[] = "/dev/null";
 
-static char            EQ[] = "=";
-static char            END[] = "\\\\";
-static char            SS[] = "//";
-static char            ST[] = "*";
+static char            tok_EQ[] = "=";
+static char            tok_END[] = "\\\\";
+static char            tok_SS[] = "//";
+static char            tok_ST[] = "*";
 
 /*
  * common syntax error message
@@ -525,9 +525,9 @@
                if (jcl->pushed)
                {
                        memcpy(&jcl->data, &jcl->push[--jcl->pushed], 
sizeof(Push_t));
-                       if (jcl->last == END)
+                       if (jcl->last == tok_END)
                        {
-                               s = END;
+                               s = tok_END;
                                goto token;
                        }
                }
@@ -534,7 +534,7 @@
                else if (jcl->data != null)
                {
                        jcl->data = null;
-                       s = END;
+                       s = tok_END;
                        goto token;
                }
                else
@@ -814,7 +814,7 @@
                                                else
                                                        xel(jcl, null);
                                        }
-                                       s = SS;
+                                       s = tok_SS;
                                        goto token;
                                }
                                else if (*jcl->data == '*')
@@ -825,7 +825,7 @@
                        }
                        continue;
                case '=':
-                       if (!n && !q && jcl->last != EQ)
+                       if (!n && !q && jcl->last != tok_EQ)
                        {
                                if (*jcl->data == '\'' && *(jcl->data + 1) == 
'\'' && (*(jcl->data + 2) == ',' || isspace(*(jcl->data + 2)) || *(jcl->data + 
2) == 0))
                                {
@@ -834,7 +834,7 @@
                                        xel(jcl, null);
                                        if ((jcl->data - s) == 3)
                                        {
-                                               s = EQ;
+                                               s = tok_EQ;
                                                goto token;
                                        }
                                }
@@ -844,11 +844,11 @@
                                                xel(jcl, null);
                                        if ((jcl->data - s) == 1)
                                        {
-                                               s = EQ;
+                                               s = tok_EQ;
                                                goto token;
                                        }
                                }
-                               xel(jcl, EQ);
+                               xel(jcl, tok_EQ);
                                break;
                        }
                        continue;
@@ -855,7 +855,7 @@
                case '*':
                        if (!n && !q && (jcl->data - s) == 1 && (*jcl->data == 
',' || *jcl->data == ' ' || *jcl->data == 0))
                        {
-                               s = ST;
+                               s = tok_ST;
                                goto token;
                        }
                        continue;
@@ -916,8 +916,8 @@
 {
        register char*  tok;
 
-       if (jcl->last != END)
-               while ((tok = lex(jcl)) && tok != END);
+       if (jcl->last != tok_END)
+               while ((tok = lex(jcl)) && tok != tok_END);
 }
 
 /*
@@ -1066,9 +1066,9 @@
 
        if (!(tok = lex(jcl)))
                syntax(jcl, 2, NiL, NiL, NiL);
-       else if (tok == END)
+       else if (tok == tok_END)
                return 0;
-       else if ((val = lex(jcl)) == EQ)
+       else if ((val = lex(jcl)) == tok_EQ)
                val = lex(jcl);
        else
        {
@@ -1298,7 +1298,7 @@
                }
                else
                        pd = 0;
-               if (val && (streq(tok, "DSN") || streq(tok, "DSNAME")) || !val 
&& (streq(tok, "DUMMY") && (val = dummy) && (dd->flags |= JCL_DD_DUMMY) || 
!jcl->pushed && tok != ST && (val = tok)))
+               if (val && (streq(tok, "DSN") || streq(tok, "DSNAME")) || !val 
&& (streq(tok, "DUMMY") && (val = dummy) && (dd->flags |= JCL_DD_DUMMY) || 
!jcl->pushed && tok != tok_ST && (val = tok)))
                {
                        if (dd->flags & JCL_DD_DUMMY)
                        {
@@ -1494,7 +1494,7 @@
                                        return -1;
                        }
                }
-               else if (tok == ST)
+               else if (tok == tok_ST)
                {
                        while (tok = card(jcl))
                        {
@@ -1511,7 +1511,7 @@
                        jcl->record = tok;
                        xel(jcl, NiL);
                        if (tok)
-                               xel(jcl, END);
+                               xel(jcl, tok_END);
                }
        }
        if ((dd->flags & JCL_DD_INCLUDE) && dd->path && jclinclude(jcl, 
dd->path, JCL_PROC, NiL))
@@ -1903,7 +1903,7 @@
        int             r;
 
        while (s = lex(jcl))
-               if (s == END)
+               if (s == tok_END)
                {
                        if (jcl->disc->errorf)
                                (*jcl->disc->errorf)(NiL, jcl->disc, 2, "THEN 
expected");
@@ -1947,9 +1947,9 @@
 
        while (tok = lex(jcl))
        {
-               if (tok != SS)
+               if (tok != tok_SS)
                {
-                       syntax(jcl, 2, tok, SS, NiL);
+                       syntax(jcl, 2, tok, tok_SS, NiL);
                        return -1;
                }
                if (!(name = lex(jcl)))
_______________________________________________
ast-developers mailing list
ast-developers@research.att.com
https://mailman.research.att.com/mailman/listinfo/ast-developers

Reply via email to