Open MPI logo

Hardware Locality Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Development mailing list

Subject: Re: [hwloc-devel] 1.3.2rc1 has escaped
From: Paul H. Hargrove (PHHargrove_at_[hidden])
Date: 2012-02-08 16:10:36


On 2/8/2012 8:58 AM, Jeff Squyres wrote:
> * Detect when a compiler such as xlc may not report compile errors
> properly, causing some configure checks to be wrong. Thanks to
> Paul H. Hargrove for reporting the problem and providing a patch.

Looks like I botched this one!

I have added two Linux/ppc64 machines the xlc-7.0, xlc-8.0 and xlc-9.0
to my testing.
These are NOT running on the odd virtual node that caused assertion
failures when testing xlc-11.1.

With these new xlc versions AND the original xlc-11.1 compiler (4
compilers on 3 different nodes) I am STILL seeing the following
INCORRECT result:
> checking for old prototype of sched_setaffinity... yes
Where gcc on the same machines correctly gives a "no" result.

Looking in config.log, I do NOT see the -qhalt=E that was discussed as
the solution to this problem:
> configure:9065: checking for old prototype of sched_setaffinity
> configure:9083: xlc -c conftest.c >&5

And, of course, I didn't see the fatal error that should have occurred
at configure time.
So, I poked around some more in config.log and found:
> configure:8338: xlc -c -q32 conftest.c >&5
> "conftest.c", line 62.43: 1506-099 (S) Unexpected argument.
> "conftest.c", line 62.55: 1506-098 (E) Missing argument(s).

So, what this means is that the probe I wrote for "xlc needs -qhalt=E"
is WRONG.

The following tests too many and too few as distinct cases, and appears
to resolve the problem for me:
--- config/hwloc.m4~ 2012-02-08 20:55:03.188903698 +0000
+++ config/hwloc.m4 2012-02-08 20:57:29.987668761 +0000
@@ -269,11 +269,16 @@

      # make sure the compiler returns an error code when function arg
count is wrong,
      # otherwise sched_setaffinity checks may fail
+ hwloc_args_check_ok=yes
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
          extern int one_arg(int x);
+ int foo(void) { return one_arg(1, 2); }
+ ]])], [ hwloc_args_check_ok=no ])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
          extern int two_arg(int x, int y);
- int foo(void) { return one_arg(1, 2) + two_arg(3); }
- ]])], [
+ int foo(void) { return two_arg(3); }
+ ]])], [ hwloc_args_check_ok=no ])
+ AS_IF([test "$hwloc_args_check_ok" != "yes"],[
          AC_MSG_WARN([Your C compiler does not consider incorrect
argument counts to be a fatal error.])
          if test "$hwloc_check_compiler_vendor_result" = "ibm"; then
              AC_MSG_WARN([For XLC you may try appending '-qhalt=-e' to
the value of CFLAGS.])

With that change in place, configure stops as desired:
> configure: WARNING: Your C compiler does not consider incorrect
> argument counts to be a fatal error.
> configure: WARNING: Please report this failure, and configure using a
> different C compiler if possible.
> configure: error: Cannot continue.

EXCEPT, that I am not seeing the "set CFLAGS..." message.
Is it possible that this check is running before
hwloc_check_compiler_vendor_result has been set?

ALSO, the text of the (missing) message is incorrect:
284c284
< AC_MSG_WARN([For XLC you may try appending '-qhalt=-e' to
the value of CFLAGS.])

---
 >             AC_MSG_WARN([For XLC you may try appending '-qhalt=e' to 
the value of CFLAGS.])
That is probably my fault, too.
-Paul
-- 
Paul H. Hargrove                          PHHargrove_at_[hidden]
Future Technologies Group
HPC Research Department                   Tel: +1-510-495-2352
Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900