Commit Graph

5230 Commits

Author SHA1 Message Date
Javier Lopez-Gomez
4d49306895 Fix DynamicLibraryManager/callable_lib_L_AB_order1.C test
`--enable-new-dtags` is needed in some toolchains to emit the new ELF dynamic
tags, i.e. RUNPATH.
Per ld(1) manual page: `By default, the new dynamic tags are not created.`
2023-05-19 23:29:06 +02:00
Javier Lopez-Gomez
e635331e85 Fix CodeUnloading/Macros.C test
Clang diagnostic verification was unhappy with the previous state of
affairs. Move affected `expected-(warning|note)` markers to `Macros.h`.

Apparently, as Jonas Hahnfeld found, this failure originated in commit
8deb57c04a5ceea96533d095092fcd4f71d1df94, but is not to be reverted
per discussion in https://github.com/root-project/root/pull/12454.
2023-05-19 23:29:06 +02:00
Javier Lopez-Gomez
11a1a348f8 DeclUnloader: remove TagDecls after all other decls
The order in which declarations are removed makes a difference, e.g.
`MaybeRemoveDeclFromModule()` may require access to type information to
make up the mangled name.

Thus, we segregate declarations to be removed in `TagDecl`s (i.e., struct
/ union / class / enum) and other declarations.  Removal of `TagDecl`s
is deferred until all the other declarations have been processed.
Declarations in each group are iterated in reverse order.

Fixes #12457.
2023-05-19 23:14:06 +02:00
Jonas Hahnfeld
badb929352 Fix C++14 build with GCC 12
Since adding bits/utility.h in commit e9a8c48e4f, a C++14 build with
GCC 12 (and potentially also other compiler versions) failed with
```
While building module 'Core':
While building module 'std' imported from input_line_1:1:
In file included from <module-includes>:38:
/opt/gcc/12.2.0/include/c++/12.2.0/functional:337:35: error: missing '#include <bits/utility.h>'; 'tuple_size' must be declared before it is used
      = typename enable_if<(__i < tuple_size<_Tuple>::value),
                                  ^
/opt/gcc/12.2.0/include/c++/12.2.0/bits/utility.h:49:12: note: declaration here is not visible
    struct tuple_size;
           ^
```

Apparently, once the module is declared, it must also be enabled for
C++14 and not restricted with cplusplus17.
2023-05-10 14:59:07 +02:00
Javier Lopez-Gomez
5f576a2ba8 DefinitionShadower: fix crash with C++20 concepts
In principle, for a TemplateDecl, `isDefinition()` issues a recursive
call passing the templated decl as a parameter.  A `ConceptDecl` is
derived from `TemplateDecl`, however, it should always be considered
a definition.

Also, update the DeclShadowing test incorporating a C++20 concept.

Fixes #12779.
2023-05-08 00:14:05 +02:00
Sergey Linev
ad5841e05c Fix std.modulemap for gcc13 (#12765)
* Fix std.modulemap for gcc13
* Update interpreter/cling/include/cling/std.modulemap

Co-authored-by: Vassil Vassilev <v.g.vassilev@gmail.com>
2023-05-05 15:44:04 +02:00
Vassil Vassilev
ea8b591452 Add memory_resource header to the modulemap. 2023-05-03 21:29:07 +02:00
Jonas Hahnfeld
4267bda54b Extend for C++20 with gcc13
Add more headers to solve merging issues with C++20.
2023-04-29 11:44:05 +02:00
Jonas Hahnfeld
03f61a8ac9 Extend for C++20 with gcc11
The new header bits/uses_allocator_args.h requires a module to solve
merging issues with C++20, but did not exist in older versions.
2023-04-29 11:44:05 +02:00
Jonas Hahnfeld
664f0837d4 Extend for C++20 with gcc10
Define bits/ranges_base.h as optional, it did not exist in the old
version of the compiler. Add two more modules to solve merging issues
with C++20.
2023-04-29 11:44:05 +02:00
Garima Singh
7c492a17c9 Add AD support for RooChebychev and RooAddPdf. 2023-04-27 00:14:06 +02:00
Garima Singh
32a72240d2 Add code-squash support for RooPolyVar and RooPolynomial. 2023-04-25 17:44:04 +02:00
Javier Lopez-Gomez
a0d186073b Ignore -Wunused-result in wrapped code
Make `FilteringDiagConsumer` also ignore -Wunused-result. Whether or not
such diagnostic is filtered depends on `CompilationOptions::IgnorePromptDiags`.

In particular, `IgnorePromptDiags` should _only_ be enabled for code parsed
via `Interpreter::EvaluateInternal()`.  Thus, as of this commit `IgnorePromptDiags`
defaults to 0 in `makeDefaultCompilationOpts()`

The observable effect of this change is ignoring `-Wunused-result` for
wrapped code, e.g.
```c++
[[nodiscard]] int f() { return 0; }

// This yields `warning: ignoring return value of function declared with 'nodiscard' attribute [-Wunused-result]`
void g() { f(); }

f(); // but this should not
```
2023-04-20 15:14:04 +02:00
Axel Naumann
37658ca14b bits/chrono.h exists already with C++11:
It is needed for C++11 support of #include <chrono>. Failures:
```
Processing /home/sftnight/build/night/LABEL/ROOT-fedora36/SPEC/default/V/master/root/tutorials/multicore/mt201_parallelHistoFill.C...
In file included from input_line_10:1:
/home/sftnight/build/night/LABEL/ROOT-fedora36/SPEC/default/V/master/root/tutorials/multicore/mt201_parallelHistoFill.C:55:51: error: no member named 'duration' in namespace 'std::chrono'
         std::this_thread::sleep_for(std::chrono::duration<double, std::nano>(500));
                                     ~~~~~~~~~~~~~^
```

and

```
root [11] #include <bits/chrono.h>
/home/sftnight/build/night/LABEL/ROOT-fedora36/SPEC/default/V/master/build/etc/cling/std.modulemap:432:10: error: module 'std.bits/chrono.h' requires feature 'cplusplus17'
  module "bits/chrono.h" [optional] {
         ^
ROOT_prompt_11:1:10: note: submodule of top-level module 'std' implicitly imported here
         ^
```
2023-04-19 12:59:06 +02:00
Axel Naumann
eaaf95f5c8 Pass isysroot to clang when determining stdlib incpath:
isysroot influences where clang will pick up libc++. Without this, and with
Xcode 14.3, cling will use libc++ from Xcode (or the command line tools) rather
than stdc++ from the macOS SDK, as clang would normally use. Passing the isysroot
(which point to the SDK) fixes this.

This solves build errors such as:
```
While building module 'Core':
While building module 'std' imported from input_line_1:1:
In file included from <module-includes>:17:
In file included from /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/math.h:309:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:462:1: error: cannot template a using declaration
using _BoolConstant _LIBCPP_NODEBUG_TYPE = integral_constant<bool, _Val>;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:462:21: error: C++ requires a type specifier for all declarations
using _BoolConstant _LIBCPP_NODEBUG_TYPE = integral_constant<bool, _Val>;
                    ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:462:68: error: use of undeclared identifier '_Val'
using _BoolConstant _LIBCPP_NODEBUG_TYPE = integral_constant<bool, _Val>;
                                                                   ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:462:73: error: expected '(' for function-style cast or type construction
using _BoolConstant _LIBCPP_NODEBUG_TYPE = integral_constant<bool, _Val>;
                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
```
2023-04-06 13:59:05 +02:00
Vassil Vassilev
f7571c07f5 Implement a module attribute 'optional' to allow missing headers.
This deals with the fact that our modulemaps include headers which can vary
across library versions and that attribute is a way to express this.
2023-03-30 17:59:05 +02:00
Vassil Vassilev
d09d5a71b7 Reland "[cxxmodules] Add more bits headers to fix module merging issues."
This reverts commit f6327a6e56861d95f34d1a85a47dcc616b335dc3.
2023-03-30 17:59:05 +02:00
Vassil Vassilev
ba13f18449 Reland "Add a module for stl_iterator_base_funcs.h avoiding merging issues for c++20"
This reverts commit 4a3258a492f4ed9660311efe12e9dbe7cd7ed188.
2023-03-30 17:59:05 +02:00
Axel Naumann
6d52a95449 Revert "Add a module for stl_iterator_base_funcs.h avoiding merging issues for c++20"
This reverts commit a4c07502a3e76c82f30828200f5fe4ae935ac166.

While this itself might not cause build issues, the related commit 90ffa89ae4 does;
handle them together.
2023-03-21 15:29:04 +01:00
Axel Naumann
f2bc02a68b Revert "[cxxmodules] Add more bits headers to fix module merging issues."
This reverts commit 90ffa89ae46b48c634547d6abd861a524a5d27c7.
It causes build failures on GCC 12.2.1 / c++17 with

```
[ 70%] Generating G__Core.cxx, ../lib/Core.pcm
In file included from input_line_7:111:
/home/linev/build/webgui/include/ROOT/RDirectoryEntry.hxx:31:33: error: missing '#include <bits/chrono.h>'; 'system_clock' must be declared before it is used
   using clock_t = std::chrono::system_clock;
                                ^
/usr/include/c++/12/bits/chrono.h:1110:12: note: declaration here is not visible
    struct system_clock
           ^
In module 'std' imported from input_line_1:1:
/usr/include/c++/12/bits/move.h:204:11: error: missing '#include <bits/chrono.h>'; 'time_point' must be defined before it is used
      _Tp __tmp = _GLIBCXX_MOVE(__a);
          ^
/home/linev/build/webgui/include/ROOT/RDirectoryEntry.hxx:89:4: note: in instantiation of function template specialization 'std::swap<std::chrono::time_point<std::chrono::system_clock, std::chrono::duration<long, std::ratio<1, 1000000000>>>>' requested here
   swap(fDate, other.fDate);
   ^
/usr/include/c++/12/bits/chrono.h:856:14: note: definition here is not reachable
      struct time_point
```
2023-03-21 15:29:04 +01:00
Vassil Vassilev
782cc41a6c Add more bits headers to fix module merging issues. 2023-03-21 09:29:07 +01:00
Vassil Vassilev
2cebf663dc Add a module for stl_iterator_base_funcs.h avoiding merging issues for c++20 2023-03-21 09:29:07 +01:00
Jonas Hahnfeld
1499c8c74f Use compiled Module for stored states
Since the upgrade to LLVM 13, the JIT infrastructure takes ownership
of the Module. After JIT compilation, we get back a (const) pointer
to the compiled module.

This fixes the Cling test ErrorRecovery/StoredState.C.
2023-03-09 11:14:07 +01:00
Axel Naumann
33de07df48 Do not try to find runtime headers in ./:
These headers are part of cling, not user code, so starting
with the current directory is pointless and can actually be
counterproductive.

This helps with https://github.com/root-project/root/issues/12409
but not enough; any dictionary header will still try to access "./".
2023-03-03 17:59:05 +01:00
Jonas Hahnfeld
8c3b18f683 Forward ABIName to MCTargetOptions
This is required on RISC-V where Linux uses the lp64d ABI that allows
the usage of floating point registers to pass arguments. It seems to
work out-of-the-box upstream in clang-repl which passes through the
function initTargetOptions in clang/lib/CodeGen/BackendUtil.cpp with
the same effect.
2023-03-01 19:14:06 +01:00
Jonas Hahnfeld
eb82dc505a Use JITLink on RISC-V
RuntimeDyld does not support RISC-V, so it makes sense to enable
JITLink by default. This also makes relocations work without support
for a large code model.

See the equivalent change upstream in https://reviews.llvm.org/D129092,
committed for LLVM 15 in a4e2c1f762
2023-03-01 19:14:06 +01:00
Jonas Hahnfeld
e65614cb92 Disable outline-atomics on AArch64
The routines __aarch64_* are defined in the static library libgcc.a
and not necessarily included in libCling or otherwise present in the
process, so the interpreter has a hard time finding them.

Fixes #12294
2023-02-20 22:14:04 +01:00
Vassil Vassilev
e26c70ae49 Remove the problematic uses_allocator_args.h
It is not present on some versions of libstdc++ which makes the compilation
of Core.pcm fail.
2023-02-17 10:29:02 +01:00
Vassil Vassilev
b474a0ab43 Add a module for experimental/string_view
Recent gcc updates somehow make experimental/string_view available through
module string_view. Then it wrongly decides it needs to include
"bits/ranges_base.h" which is a c++14 header and breaks the compilation in case
of c++11.

This patch adds a proper experimental/string_view to disallow such shadowing.
2023-02-17 10:29:02 +01:00
Bertrand Bellenot
b3b15d60e1 Fix modules and modules.idx generation on Windows and disable a few more modules causing potential crashes (#12252)
* Fix modules and modules.idx generation on Windows and disable a few more modules causing potential crashes

* Introduce a new TROOT::GetSharedLibDir() method to reduce the need of #ifdef R__WIN32

* Use the value of ROOT_GET_LIBRARY_OUTPUT_DIR instead of CMAKE_RUNTIME_OUTPUT_DIRECTORY (which is the same anyway)

* cleanup the code

* Remove unnecessary check
2023-02-17 08:44:05 +01:00
Jonas Hahnfeld
75930f9dfd Set DataLayout from our TargetMachine (#12335)
Otherwise LLJIT's constructor will ask the LLJITBuilder's JTMB to
create a DataLayout. As we don't propagate the JTMB (yet -- we
probably should!), this will be wrong if target features influence
the DataLayout.

This should fix #12293.
2023-02-16 20:44:03 +01:00
Axel Naumann
e122c6dcc6 Revert "Disable GlobalISel on AArch64":
This reverts fcab0add4a79379b5087fe786261f4ab0cc9776a which is not
needed anymore since llvm13 / ORCv2 / JITLink.
2023-02-16 17:14:03 +01:00
Jonas Hahnfeld
38154308df Switch back to large code model for macOS on AArch64
It results in relocation targets that are out-of-range.
2023-02-07 08:59:05 +01:00
Vassil Vassilev
bc0a44c2b7 Enable a few modules for Windows. Now we can run hsimple.C. 2023-02-07 08:59:05 +01:00
Vassil Vassilev
727908e8af Adapt the cling-demo to the new cling::Value interface. 2023-02-05 22:59:03 +01:00
Jonas Hahnfeld
1d93ee8d58 Simplify creation of TargetMachine
We know exactly which target triple and features the CompilerInstance
wants, we don't need to (and probably must not) second-guess that. This
brings us closer to upstream clang-repl and also includes the change of
https://reviews.llvm.org/D128853 which is crucial for RISC-V.
2023-02-05 12:59:03 +01:00
Jonas Hahnfeld
1603be8b87 Set up TargetMachine for JITLink
I missed this in commit 3ff7c1e8e2 and it seems to work by chance on
macOS, but this is needed on Linux: Before, CLING_JTLINK=1 on x86_64
complained about "Unspported personality pointer encoding 0x00" and
crashed entirely on RISC-V.
2023-02-05 12:59:03 +01:00
Vassil Vassilev
6ef68e5512 Fix potential pre-existing issue for big endian 2023-02-03 07:29:07 +01:00
Vassil Vassilev
643cfe84ab Improve performance by allowing most of cling::Value to inline.
We introduce an enum which mirrors the type kind and we use it in the getAs and
castAs operations to allow the compiler/interpreter to see all of the functions
and potentially inline them.

This patch brings the performance to similar levels with what we have in the
master.
2023-02-03 07:29:07 +01:00
Vassil Vassilev
afadc28b05 Mark m_Storage as a const ref. 2023-02-03 07:29:07 +01:00
Vassil Vassilev
632aba9c56 Implement a rigorous type checking when we call getX and setX.
These interfaces assume we know the type and we should compare if the underlying
type is the one we expect when using the setters and getters. Unfortunately,
this is not the case and we need to further investigate.
2023-02-03 07:29:07 +01:00
Vassil Vassilev
5add0d7732 Rename simplisticCast to castAs. 2023-02-03 07:29:07 +01:00
Vassil Vassilev
ad78ae2c61 Remove unused constructor 2023-02-03 07:29:07 +01:00
Vassil Vassilev
320d63785f Improve the templated Create interface to capture compile-time types.
This interface allows us to set a value and deduce its corresponding type very
efficiently. This is useful when we use cling::Value to model input arguments
for a function call in the JIT (eg. via TClingCallFunc).

That patch essentially makes cling::Value to hold a value and a type that
correctly models the compiled code.
2023-02-03 07:29:07 +01:00
Vassil Vassilev
07c4469328 Improve consistency in cling::Value.
The improvements are:
  * We provide getX and setX interfaces instead of returning the address for the
    non const methods. This allows us to be more consistent in terms of
    lifetimes as now users cannot take the address of block of memory which can
    be freed by the cling::Value.
  * We remove the storage types and we rely on the clang::Type which we have in
    the cling::Value.
2023-02-03 07:29:07 +01:00
Vassil Vassilev
e18104aa12 Make function file static to reduce includes 2023-02-03 07:29:07 +01:00
Vassil Vassilev
44cac5e3af Implement more robust conversion via getAs in cling::Value.
Here we enumerate most of the builtin types and we the generate template
specializations for all of them which are capable to perform the correct
conversions.
2023-02-03 07:29:07 +01:00
Vassil Vassilev
a55501d540 Add variant to the modulemap to address a cmssw-related issue. 2023-02-02 12:14:04 +01:00
Jonas Hahnfeld
dc6ee2401b Add back basic support for JITLink
The custom memory manager is only needed to avoid freeing the memory
segments; the default InProcessMemoryManager (which is mostly copied)
already does slab allocation to keep all segments together which is
needed for exception handling support.

A limitation of this rudimentary support is that CLING_DEBUG and
CLING_PROFILE do not work, they need to be registered as plugins.
2023-02-01 13:44:06 +01:00
Javier Lopez-Gomez
41c41c26df Add missing const in operator== and operator!=
Add missing `const` in `{DelayCall,MacroDirective}Info::operator==`
and `operator!=`. This fixes the following warnings in C++20
```
interpreter/cling/lib/Interpreter/Transaction.cpp:173:23: warning: ISO C++20 considers use of overloaded operator '!=' (with operand types 'cling::Transaction::DelayCallInfo' and 'cling::Transaction::DelayCallInfo') to be ambiguous despite there being a unique best viable function with non-reversed arguments [-Wambiguous-reversed-operator]
interpreter/cling/lib/Interpreter/Transaction.cpp:218:21: warning: ISO C++20 considers use of overloaded operator '==' (with operand types 'cling::Transaction::MacroDirectiveInfo' and 'cling::Transaction::MacroDirectiveInfo') to be ambiguous despite there being a unique best viable function [-Wambiguous-reversed-operator]
```
2023-02-01 08:29:04 +01:00