emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#47698: closed ([powerpc64le-linux] "check" package fails to build)


From: GNU bug Tracking System
Subject: bug#47698: closed ([powerpc64le-linux] "check" package fails to build)
Date: Fri, 18 Jun 2021 18:10:01 +0000

Your message dated Fri, 18 Jun 2021 11:09:16 -0700
with message-id <87o8c36o4z.fsf@gmail.com>
and subject line Re: bug#47698: [powerpc64le-linux] "check" package fails to 
build
has caused the debbugs.gnu.org bug report #47698,
regarding [powerpc64le-linux] "check" package fails to build
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
47698: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=47698
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: [powerpc64le-linux] "check" package fails to build Date: Sat, 10 Apr 2021 18:00:40 -0700 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
Hi,

On commit 83f8b6d32c76c56e4bb58eeb5af1259028d7ee72, on
powerpc64le-linux, the "check" package fails to build.  This prevents
many other packages from being built successfully.  It succeeds when
built on x86_64-linux, so the problem is probably specific to
powerpc64le-linux.

The following tests failed - I have attached test-suite.log:

FAIL: check_check_export
FAIL: check_check

I've attached test-suite.log.  There's a lot of messages.  However, the
following ones caught my eye:

> check.c:584: Bad status in set_fork_status

I tried adding some debug statements here, and it seems like the value
is -1 for some reason.  I don't know if that's really a problem,
though.  I suspect maybe it's just irrelevant noise...  Not sure.

> 19%: Checks: 260, Failures: 165, Errors: 45

Lots of failures, lots of errors.  Consider these:

> check_check_sub.c:74:P:Simple Tests:test_fail_if_pass:0: Passed
> check_check_sub.c:83:F:Simple Tests:test_fail_if_fail:0: This test should fail

The code is:

--8<---------------cut here---------------start------------->8---
START_TEST(test_fail_if_pass)
{
  record_test_name(tcase_name());

  fail_if(1 == 2, "This test should pass");
  fail_if(0, "This test should pass");
}
END_TEST

START_TEST(test_fail_if_fail)
{
  record_test_name(tcase_name());

  record_failure_line_num(__LINE__);
  fail_if(1 == 1, "This test should fail");
}
END_TEST
--8<---------------cut here---------------end--------------->8---

The fail_if macro is defined thusly:

--8<---------------cut here---------------start------------->8---
/*                                                                              
                                                                                
                               
 * Fail the test case if expr is false                                          
                                                                                
                               
 *                                                                              
                                                                                
                               
 * This call is deprecated.                                                     
                                                                                
                               
 *                                                                              
                                                                                
                               
 * NOTE: The space before the comma sign before ## is essential to be 
compatible                                                                      
                                         
 * with gcc 2.95.3 and earlier.                                                 
                                                                                
                               
 * FIXME: these macros may conflict with C89 if expr is                         
                                                                                
                               
 * FIXME:   strcmp (str1, str2) due to excessive string length.                 
                                                                                
                               
 */
#define fail_if(expr, ...)\
  (expr) ? \
     _ck_assert_failed(__FILE__, __LINE__, "Failure '"#expr"' occurred" , ## 
__VA_ARGS__, NULL) \
     : _mark_point(__FILE__, __LINE__)
--8<---------------cut here---------------end--------------->8---

This is pretty confusing to me.  The comment says "Fail the test case if
expr is false", but it sure looks to me like it fails the test case when
expr evaluates to true.  Am I confused?  I feel confused.  :-)

Anyway, regardless of how both of those test cases are supposed to run,
it seems likely that something funky is going on in the 1 == 1
evaluation.

Here's another example:

> check_check_sub.c:219:F:Simple Tests:test_ck_assert:0: Assertion 'x ==
> y' failed

The test is:

--8<---------------cut here---------------start------------->8---
/* These ck_assert tests are all designed to fail on the last                   
                                                                                
                               
   assertion. */

START_TEST(test_ck_assert)
{
  int x = 3;
  int y = 3;

  record_test_name(tcase_name());

  ck_assert(1);
  ck_assert(x == y);
  y++;
  ck_assert(x != y);
  record_failure_line_num(__LINE__);
  ck_assert(x == y);
}
END_TEST
--8<---------------cut here---------------end--------------->8---

There are some double-related test failures, too:

> check_check_sub.c:1458:F:Simple Tests:test_ck_assert_double_finite:0:
> Assertion 'x is finite' failed: x == inf

The corresponding test code:

--8<---------------cut here---------------start------------->8---
START_TEST(test_ck_assert_double_finite)
{
  double x = 0.0001;
  double t = 1;

  record_test_name(tcase_name());

  ck_assert_double_finite(x);
  /* MS VS doesn't allow explicit division by zero */
  x = 1.0 / (1.0 - t);
  record_failure_line_num(__LINE__);
  ck_assert_double_finite(x);
}
END_TEST
--8<---------------cut here---------------end--------------->8---

Some timeout-related tests fail, too:

> check_check_sub.c:2650:E:Timeout Double Scaling
> Tests:test_sleep9_fail:0: (after this point) Test timeout expired

A particularly suspicious failure involving "long double":

> check_check_sub.c:1830:F:Simple
> Tests:test_ck_assert_ldouble_eq_tol_with_mod:0: Assertion 'fabsl(2%f -
> 3%d) < 2%p' failed: 3%d == 1, 2%f == 0, 2%p == 0

The code:

--8<---------------cut here---------------start------------->8---
START_TEST(test_ck_assert_ldouble_eq_tol_with_mod)
{
  int d = 2;
  int f = 2;
  int p = 2;
  
  record_test_name(tcase_name());
  
  record_failure_line_num(__LINE__);
  ck_assert_ldouble_eq_tol(3%d, 2%f, 2%p);
}
END_TEST
--8<---------------cut here---------------end--------------->8---

The ck_assert_ldouble_eq_tol macro is:

--8<---------------cut here---------------start------------->8---
/**                                                                             
                                                                                
                               
 * Check two double precision floating point numbers to determine if X≈Y        
                                                                                
                               
 * with specified tolerance                                                     
                                                                                
                               
 *                                                                              
                                                                                
                               
 * If not X ≈ Y with error < T, the test fails.                                 
                                                                                
                               
 *                                                                              
                                                                                
                               
 * @param X floating point number (long double)                                 
                                                                                
                               
 * @param Y floating point number (long double) to compare against X            
                                                                                
                               
 * @param T tolerance (long double)                                             
                                                                                
                               
 *                                                                              
                                                                                
                               
 * @note If the check fails, the remaining of the test is aborted               
                                                                                
                               
 *                                                                              
                                                                                
                               
 * @since 0.11.0                                                                
                                                                                
                               
 */
#define ck_assert_ldouble_eq_tol(X, Y, T)  
_ck_assert_floating_absdiff_op_tol(X, Y, <, T, long double, "L")
--8<---------------cut here---------------end--------------->8---

I know that there are "long double" problems on POWER9 in some cases...
I wonder if this is the root cause of the issue here?  Perhaps we need
to pass a flag or something?  Could it be that we need to compile gcc
with the --with-long-double configuration option after all, to fix this?
As described here, we don't currently do that:

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47349#11

I don't really know what's going on, but I'll try compiling GCC 7.5.0
with the --with-long-double option, and I'll report whether it fixes
this issue.  If someone has any other idea before then, I'm all ears.

-- 
Chris

Attachment: test-suite.log
Description: Text document

Attachment: signature.asc
Description: PGP signature


--- End Message ---
--- Begin Message --- Subject: Re: bug#47698: [powerpc64le-linux] "check" package fails to build Date: Fri, 18 Jun 2021 11:09:16 -0700 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)
Committed to core-updates in bcdc13454c4afab37b650d4bbfa95e539060619f.

-- 
Chris

Attachment: signature.asc
Description: PGP signature


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]