[Openmp-commits] [PATCH] D59451: Fix gettid warnings and one test on FreeBSD

Dimitry Andric via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Sat Mar 16 13:02:28 PDT 2019


dim added a comment.

In D59451#1432201 <https://reviews.llvm.org/D59451#1432201>, @protze.joachim wrote:

> This code does not directly use pthreads, but uses C++11 threads.
>  Why does the compiler not link the necessary threading library, when using C++11 threads?


How would the compiler know up-front what is in the code?  I have not often seen compilers that influence linking flags from the code that was compiled, unless maybe the Microsoft specific `#pragma lib` feature (which somebody is now adding to clang, I believe).  Usually, these kinds of flags are specified by the user, and passed from the frontend to the linker.

> I suggest to define a lit macro like `%cxx11_thread` which sets the necessary flags. I guess, that on Linux -fopenmp already implies linking the pthread library.

It seems so, there is this code in `clang/lib/Driver/ToolChains/Gnu.cpp`:

  // FIXME: Only pass GompNeedsRT = true for platforms with libgomp that
  // require librt. Most modern Linux platforms do, but some may not.
  if (addOpenMPRuntime(CmdArgs, ToolChain, Args,
                       JA.isHostOffloading(Action::OFK_OpenMP),
                       /* GompNeedsRT= */ true))
    // OpenMP runtimes implies pthreads when using the GNU toolchain.
    // FIXME: Does this really make sense for all GNU toolchains?
    WantPthread = true;

IMHO this is a little magic, though. Then again, `-fopenmp` is rather magic anyway. :)

> Searching for other use of pthread in the tests, I found
> 
>   ./tasking/bug_proxy_task_dep_waiting.c
>   ./tasking/bug_nested_proxy_task.c
>   ./misc_bugs/omp_foreign_thread_team_reuse.c
> 
> 
> These tests use -lpthread (should this also be replaced by -pthread?)

Probably best to use the same flags everywhere.

> Furthermore, one of them include omp_testsuite.h, which is supposed to provide a Windows compatible implementation of the pthread-create/join functions, but the testcase still links the pthread library. Does anyone actually run the tests on Windows?

I have no idea, it isn't clear to me where the test suite 'decides' which test cases are run for which operating system.


Repository:
  rOMP OpenMP

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59451/new/

https://reviews.llvm.org/D59451





More information about the Openmp-commits mailing list