.. _omp140:
Could not internalize function. Some optimizations may not be possible. [OMP140]
This analysis remark indicates that function internalization failed for the
given function. Internalization occurs when a call to a function that ordinarily
has external visibility is replaced with a call to a copy of that function with
only internal visibility. This allows the compiler to make strong static
assertions about the context a function is called in. Without internalization
this analysis would always be invalidated by the possibility of someone calling
the function in a different context outside of the current translation unit.
This is necessary for optimizations like :ref:OMP111 <omp111> and :ref:OMP120 <omp120>. If a function failed to be internalized it most likely has linkage
that cannot be copied. Internalization is currently only enabled by default for
OpenMP target offloading.
Examples
This will occur for any function declaration that has incompatible linkage.
.. code-block:: c++
attribute((weak)) void setup();
void foo() { #pragma omp target { setup(); #pragma omp parallel { work(); } } }
.. code-block:: console
$ clang++ -fopenmp -fopenmp-targets=nvptx64 -O1 -Rpass-analysis=openmp-opt omp140.cpp omp140.cpp:1:1: remark: Could not internalize function. Some optimizations may not be possible. [OMP140] attribute((weak)) void setup() { ^
Diagnostic Scope
OpenMP analysis remark.