GNU bug report logs - #44795
automake-1.16.3 make check failed on Solaris 11.3 x86/x64

Previous Next

Package: automake;

Reported by: Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>

Date: Sun, 22 Nov 2020 12:54:01 UTC

Severity: normal

Tags: confirmed, help

Done: Karl Berry <karl <at> freefriends.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 44795 in the body.
You can then email your comments to 44795 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Sun, 22 Nov 2020 12:54:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>:
New bug report received and forwarded. Copy sent to bug-automake <at> gnu.org. (Sun, 22 Nov 2020 12:54:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>
To: "bug-automake <at> gnu.org" <bug-automake <at> gnu.org>
Subject: automake-1.16.3 make check failed on Solaris 11.3 x86/x64
Date: Sun, 22 Nov 2020 21:52:51 +0900 (JST)
[Message part 1 (text/plain, inline)]
Hello,

Installed automake-1.16.3, but make check failed on Solaris 11.3 x86/x64.

$ uname -a
SunOS hidden 5.11 11.3 i86pc i386 i86pc Solaris

$ gcc --version
gcc (GCC) 10.2.0

$ ./configure --prefix=/opt/local CC=gcc CXX=g++
$ make
$ make -k check
  :
FAIL: t/lex-clean-cxx.sh
FAIL: t/lex-depend-cxx.sh

lex-clean-cxx.log & lex-depend-cxx.log are attacked.

Regards.
[lex-clean-cxx.log (text/plain, attachment)]
[lex-depend-cxx.log (text/plain, attachment)]

Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Sun, 22 Nov 2020 23:20:02 GMT) Full text and rfc822 format available.

Message #8 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Karl Berry <karl <at> freefriends.org>
To: yoi_no_myoujou <at> yahoo.co.jp
Cc: 44795 <at> debbugs.gnu.org
Subject: Re: bug#44795: automake-1.16.3 make check failed on Solaris 11.3
 x86/x64
Date: Sun, 22 Nov 2020 16:19:03 -0700
    joe.cc:84:21: error: conflicting declaration of 'int yylex()' with 'C' linkage
       84 | #define YY_DECL int yylex (void)
          |                     ^~~~~
    joe.cc:85:12: note: in expansion of macro 'YY_DECL'
       85 | extern "C" YY_DECL;
          |            ^~~~~~~
    joe.cc:32:6: note: previous declaration with 'C++' linkage
       32 |  int yylex(void);
          |      ^~~~~

I'm sorry, but I don't know what to do. Apparently the error is
intentional in gcc10 (I think it's about gcc10, not Solaris), and the
same identifier can't be defined in two language "linkage" namespaces.
So how is anyone supposed to write code that works under both C and C++
any more?  I'm obviously missing something fundamental.

Anyway, in the particular case at hand, those tests include the code:

#define YY_DECL int yylex (void)
extern "C" YY_DECL;
..
extern "C" int yylex (void);

I assume it was written that way because it had to be. So I don't know
how to change it to placate the compiler (and still work with older
compilers).

Paul, Jim, anyone?

Thanks for the report,
Karl




Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Mon, 23 Nov 2020 00:27:01 GMT) Full text and rfc822 format available.

Message #11 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>
To: Karl Berry <karl <at> freefriends.org>
Cc: "44795 <at> debbugs.gnu.org" <44795 <at> debbugs.gnu.org>
Subject: Re: bug#44795: automake-1.16.3 make check failed on Solaris 11.3
 x86/x64
Date: Mon, 23 Nov 2020 09:26:14 +0900 (JST)
> I think it's about gcc10, not Solaris

No.
The same errors are detected with gcc-9.3.0.

I do not have older versions such as gcc-[1-8].

Regards,





Added tag(s) help and confirmed. Request was from Karl Berry <karl <at> freefriends.org> to control <at> debbugs.gnu.org. (Mon, 23 Nov 2020 22:43:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Tue, 24 Nov 2020 02:07:03 GMT) Full text and rfc822 format available.

Message #16 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Karl Berry <karl <at> freefriends.org>
To: yoi_no_myoujou <at> yahoo.co.jp
Cc: 44795 <at> debbugs.gnu.org
Subject: Re: bug#44795: automake-1.16.3 make check failed on Solaris 11.3
 x86/x64
Date: Mon, 23 Nov 2020 19:06:54 -0700
    The same errors are detected with gcc-9.3.0.

Ok, gcc 9 or 10. We can figure out the exact version where gcc started
the errors if we need to. It doesn't happen with the much older gcc
version I have (reports as gcc 4.8.5 on centos7, though centos does
major patches to that).

Anyway, I guess the issue is that this two-line C++ program no longer
compiles with new-enough gcc:

  extern "C" int yylex (void);
  extern int yylex (void);

Can you discern what change to the code will pacify the compiler?
I could not find the answer.

(The "C" line is in the test sources. The non-"C" line is generated by
(f)lex.)

Thanks,
Karl




Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Tue, 24 Nov 2020 05:21:02 GMT) Full text and rfc822 format available.

Message #19 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>
To: Karl Berry <karl <at> freefriends.org>
Cc: "44795 <at> debbugs.gnu.org" <44795 <at> debbugs.gnu.org>
Subject: Re: bug#44795: automake-1.16.3 make check failed on Solaris 11.3
 x86/x64
Date: Tue, 24 Nov 2020 14:20:20 +0900 (JST)
Hello,

I don't know how to change the code, but it seems to be caused by difference between Solaris lex & flex (flex 2.6.4).
make check passes if flex has priority over lex.

What I tried is:
$ sudo mv /usr/bin/lex /usr/bin/lex-
$ ./configure --prefix=/opt/local CC=gcc CXX=g++
$ make
$ make -k check
  :
PASS: t/lex-clean-cxx.sh
PASS: t/lex-depend-cxx.sh
  :
============================================================================
Testsuite summary for GNU Automake 1.16.3
============================================================================
# TOTAL: 2977
# PASS:  2823
# SKIP:  115
# XFAIL: 39
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

$ sudo mv  /usr/bin/lex- /usr/bin/lex


Regards,





Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Tue, 24 Nov 2020 22:42:01 GMT) Full text and rfc822 format available.

Message #22 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Karl Berry <karl <at> freefriends.org>
To: yoi_no_myoujou <at> yahoo.co.jp
Cc: 44795 <at> debbugs.gnu.org
Subject: Re: bug#44795: automake-1.16.3 make check failed on Solaris 11.3
 x86/x64
Date: Tue, 24 Nov 2020 15:40:59 -0700
    I don't know how to change the code, but it seems to be caused by
    difference between Solaris lex & flex (flex 2.6.4).  make check
    passes if flex has priority over lex.

Thanks for the info. There are other deficiencies with support for
native Solaris tools -- https://bugs.gnu.org/42393.  In that bug, a
similar error message about those tests when using the Solaris compiler
is reported. (So I was wrong, it's not really about changes in gcc,
except insofar as older gcc's might have accepted it.)

I have nothing against applying patches to improve the situation, if
Solaris users can figure out what to do, but I can't do anything about
fixing these problems myself. Sorry.

I marked this bug as "confirmed" and "needs help". --best, karl.




Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Sun, 16 Apr 2023 16:38:03 GMT) Full text and rfc822 format available.

Message #25 received at 44795 <at> debbugs.gnu.org (full text, mbox):

From: Bogdan <bogdro_rep <at> gmx.us>
To: automake-patches <at> gnu.org, 34151 <at> debbugs.gnu.org, 42393 <at> debbugs.gnu.org,
 44795 <at> debbugs.gnu.org, 49755 <at> debbugs.gnu.org, 45205 <at> debbugs.gnu.org,
 55073 <at> debbugs.gnu.org
Subject: [PATCH][bug 34151, 42393, 44795, 49755, 45205, 55073] Fix lex/yacc
 C++ tests on Solaris/SunOS
Date: Sun, 16 Apr 2023 18:37:28 +0200
[Message part 1 (text/plain, inline)]
Hi all.

 The Solaris/SunOS lex generates C++ code with functions properly 
wrapped into >extern "C"<, but only if:

- compiling as C++ (__cplusplus is #defined),

- the feature constant __EXTERN_C__ is #defined (probably meant just 
for the SunOS compiler, not for all).

Other compilers, like GCC/G++, obviously miss the SunOS-specific 
__EXTERN_C__ and thus miss >extern "C"<, declaring the yylex() 
function as C++ (the default). This doesn't need to be a problem, but:

- the function should be declared as the user code expects it (as C 
for C programs and as C++ for C++ programs),

- the Automake lex tests for C++ re-declare the function always as a C 
function.

 The re-declarations happens probably for good reason, like for lex 
implementations which don't declare the function in advance combined 
with C/C++ compilers which always require declarations. Unfortunately, 
having the same function declared as C++ (default) first and then 
later as C causes compiler errors.

 The attached patch corrects the declarations in the following way:

- if we're in C++ mode and __EXTERN_C__ is declared (so, we're on a 
SunOS with their compiler), declare the function as C in C++ mode 
(i.e., use >extern "C"<), just like the SunOS lex does,

- if we're in C++ mode and __EXTERN_C__ is NOT declared, but also 
"__sun" is not declared (so, we're NOT on a SunOS), still assume C++ 
mode, but a different system and declare the function as C in C++ mode 
(i.e., use >extern "C"<) to support other compilers,

- if we're in C++ mode and __EXTERN_C__ is NOT declared, but also 
"__sun" IS declared (so, we ARE on a SunOS, but not using their 
compiler), declare the function as C++ in C++ mode, just like the 
SunOS lex does,

- if we're NOT in C++ mode, declare the function as C. Not the case in 
these tests, though.

 This should match what the SunOS lex/compiler do and expect which 
not braking other systems (re-checked on my Linux - works).

 Verified that the defect exists on a Solaris 11.4 Build 15 (SunOS 
5.11, GCC 7.3.0, amd64) and that the patch fixes it.

 Furthermore, I checked how GCC manages the declarations of standard 
C functions in C++. Seems so simple as saying:

	using std::some_c_library_function_name;

 which the SunOS library (or maybe just the old GCC library there) is 
not doing.
 So, it just takes this to fix the missing prototypes in C++ mode.

 In short, the patch:
- fixes the remaining part of 
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=34151,
- fixes the remaining part of 
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=42393 
(t/silent-many-languages.sh works for me),
- fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=44795,
- fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49755,
- partially fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205,
- partially fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55073.

 Fortunately, these parts are just problems with the tests 
themselves, not with Automake in general.

-- 
Regards - Bogdan ('bogdro') D.                 (GNU/Linux & FreeDOS)
X86 assembly (DOS, GNU/Linux):    http://bogdro.evai.pl/index-en.php
Soft(EN): http://bogdro.evai.pl/soft  http://bogdro.evai.pl/soft4asm
www.Xiph.org  www.TorProject.org  www.LibreOffice.org  www.GnuPG.org
[automake-sunos2-mail.diff (text/x-patch, attachment)]

Reply sent to Karl Berry <karl <at> freefriends.org>:
You have taken responsibility. (Sun, 09 Jul 2023 16:58:04 GMT) Full text and rfc822 format available.

Notification sent to Kiyoshi KANAZAWA <yoi_no_myoujou <at> yahoo.co.jp>:
bug acknowledged by developer. (Sun, 09 Jul 2023 16:58:04 GMT) Full text and rfc822 format available.

Message #30 received at 44795-done <at> debbugs.gnu.org (full text, mbox):

From: Karl Berry <karl <at> freefriends.org>
To: dclarke <at> blastwave.org, dam <at> opencsw.org, yoi_no_myoujou <at> yahoo.co.jp
Cc: 42393 <at> debbugs.gnu.org, 45205 <at> debbugs.gnu.org, 44795 <at> debbugs.gnu.org,
 30612 <at> debbugs.gnu.org, 31126 <at> debbugs.gnu.org, 55073 <at> debbugs.gnu.org,
 49755 <at> debbugs.gnu.org, 15256 <at> debbugs.gnu.org, 34151 <at> debbugs.gnu.org,
 bogdro_rep <at> gmx.us
Subject: Re: bug#31126: GNU Automake 1.16.1 fails 21 tests on Solaris 10
 sparcv9
Date: Sun, 9 Jul 2023 10:57:42 -0600
Hi - you have each reported Automake test failures on Solaris.

I've just pushed a fix from Bogdan (thanks Bogdan!) for some of these,
which (sometimes with other fixes already made) closes some bugs.
Bogdan explains the details of the latest:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13

Other problems remain and still need debugging, as Bogdan explains in:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#16

If anyone has time and interest to try bootstrapping current automake,
run the test suite, and find what still fails and why, that would be
great. --thanks, karl.

Bugs closed (with fingers crossed): 15256 30612 34151 42393 44795 49755.
Bugs still open: 31126 45205 55073.


2023-07-09  Bogdan  <bogdro_rep <at> gmx.us>

tests: avoid some SunOS declaration conflicts.

This change: finishes fixing https://bugs.gnu.org/34151
  and https://bugs.gnu.org/30612 and https://bugs.gnu.org/42393;
fixes https://bugs.gnu.org/44795 and https://bugs.gnu.org/49755;
partially fixes https://bugs.gnu.org/45205
  and https://bugs.gnu.org/55073.
Still open: https://bugs.gnu.org/15256;

* t/lex-clean-cxx.sh: test __cplusplus, __sun, and __EXTERN_C__
before using extern "C" for the yylex decl, as explained at
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
* t/lex-depend-cxx.sh: likewise.

* t/yacc-cxx.sh: "using" std::exit, std::free, std::malloc.
* t/yacc-d-cxx.sh: likewise.
* t/yacc-mix-c-cxx.sh: likewise.

* NEWS: mention this.
diff --git a/NEWS b/NEWS
index 61d631ba0..23b2cc50a 100644
--- a/NEWS
+++ b/NEWS
@@ -46,6 +46,8 @@ New in 1.17:
   - distcleancheck ignores "silly rename" files (.nfs* .smb* .__afs*)
     that can show up on network file systems.

+  - tests: avoid some declaration conflicts for lex et al. on SunOS.
+
 * Obsolescent features:

   - py-compile no longer supports Python 0.x or 1.x versions.  Python 2.0,
diff --git a/t/lex-clean-cxx.sh b/t/lex-clean-cxx.sh
index 3632d5c87..8a086304f 100644
--- a/t/lex-clean-cxx.sh
+++ b/t/lex-clean-cxx.sh
@@ -51,10 +51,15 @@ CLEANFILES = parsebaz.l++ parsequx.lpp
 LDADD = $(LEXLIB)
 END

+# For the explanation of the conditionals on using extern "C",
+# see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
 cat > parsefoo.lxx << 'END'
 %{
 #define YY_DECL int yylex (void)
-extern "C" YY_DECL;
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+YY_DECL;
 #define YY_NO_UNISTD_H 1
 int isatty (int fd) { return 0; }
 %}
@@ -71,7 +76,10 @@ cp parsefoo.lxx parsebar.ll

 cat > mainfoo.cc << 'END'
 // This file should contain valid C++ but invalid C.
-extern "C" int yylex (void);
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+int yylex (void);
 using namespace std;
 int main (int argc, char **argv)
 {
diff --git a/t/lex-depend-cxx.sh b/t/lex-depend-cxx.sh
index 60615a54e..682b2ccc5 100644
--- a/t/lex-depend-cxx.sh
+++ b/t/lex-depend-cxx.sh
@@ -44,10 +44,15 @@ test-obj-updated: joe.$(OBJEXT) moe.$(OBJEXT)
 	is_newest moe.$(OBJEXT) my-hdr.hxx
 END

+# For the explanation of the conditionals on using extern "C",
+# see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
 cat > joe.ll << 'END'
 %{
 #define YY_DECL int yylex (void)
-extern "C" YY_DECL;
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+YY_DECL;
 #define YY_NO_UNISTD_H 1
 int isatty (int fd) { return 0; }
 %}
diff --git a/t/yacc-cxx.sh b/t/yacc-cxx.sh
index 1bf75a975..5b385870c 100644
--- a/t/yacc-cxx.sh
+++ b/t/yacc-cxx.sh
@@ -49,6 +49,9 @@ cat > parse1.yy << 'END'
 // Valid C++, but deliberately invalid C.
 #include <cstdio>
 #include <cstdlib>
+using std::exit;
+using std::free;
+using std::malloc;
 // "std::" qualification required by Sun C++ 5.9.
 int yylex (void) { return std::getchar (); }
 void yyerror (const char *s) {}
diff --git a/t/yacc-d-cxx.sh b/t/yacc-d-cxx.sh
index 56f43c940..576e8e2aa 100644
--- a/t/yacc-d-cxx.sh
+++ b/t/yacc-d-cxx.sh
@@ -31,6 +31,9 @@ write_parse ()
     #include <stdlib.h>
     // Valid C++, but deliberately invalid C.
     #include <cstdlib>
+    using std::exit;
+    using std::free;
+    using std::malloc;
     #include "$header"
     int yylex (void) { return 0; }
     void yyerror (const char *s) {}
diff --git a/t/yacc-mix-c-cxx.sh b/t/yacc-mix-c-cxx.sh
index a73935c39..7c44e0926 100644
--- a/t/yacc-mix-c-cxx.sh
+++ b/t/yacc-mix-c-cxx.sh
@@ -86,6 +86,9 @@ cat > parse.yy <<'END'
 // https://bugs.gnu.org/20031
 #include <stdlib.h>
 // Valid C++, but deliberately invalid C.
+using std::exit;
+using std::free;
+using std::malloc;
 #include <cstdlib>
 #include "parse.hh"
 int yylex (void) { return 0; }

compile finished at Sun Jul  9 09:56:41 2023




Information forwarded to bug-automake <at> gnu.org:
bug#44795; Package automake. (Sun, 09 Jul 2023 16:58:07 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 07 Aug 2023 11:24:12 GMT) Full text and rfc822 format available.

This bug report was last modified 263 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.