Commit Graph

4315 Commits

Author SHA1 Message Date
Vassil Vassilev
5789f5b2eb Build clingDemoPlugin when testing. 2018-11-21 17:15:14 +01:00
Vassil Vassilev
51a83f543d Reduce the libraries we link to. 2018-11-21 17:15:14 +01:00
Vassil Vassilev
f83498c6a0 Handle the case if the plugin is passed as a shared object.
When cling is embedded and the plugins are linked statically we can rely
on the initialization of the Preprocessor to register the pragmas.

Currently, due to the current implementation deficiency we cannot rely
on the same mechanism when loading the plugins as shared objects.

This patch fixes the failing cling test.
2018-11-20 10:50:54 +01:00
Vassil Vassilev
60a08fd97a Further delay the lazy initialization of dynamic lookup.
This optimizes the ROOT startup for C++ Modules by avoiding
deserialization of redundant declarations.
2018-11-20 10:50:54 +01:00
Vassil Vassilev
ce34bd7abf We do not need to mark explicitly funtions defined in a class inline.
See [dcl.inline].4: "A function defined within a class definition is an inline
function."
2018-11-16 16:43:58 +01:00
Vassil Vassilev
4336ae74c7 Standalone function definitions in headers must be marked inline. 2018-11-16 16:43:58 +01:00
Vassil Vassilev
04601bd1bf Add a FIXME. 2018-11-15 23:44:56 +01:00
Bertrand Bellenot
a75d9436bc Fix potential issue with Unicode
Fix potential compilation error C2664: 'HANDLE CreateFileW(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE)': cannot convert argument 1 from 'const char [8]' to 'LPCWSTR' with Unicode/MBCS, as reported here: https://github.com/root-project/cling/issues/186#issuecomment-404902026
2018-11-15 15:39:52 +01:00
Vassil Vassilev
13cbf38ae0 Do not re-register plugin pragmas.
The clang::Preprocessor::RegisterBuiltinPragmas already registered them

This patch avoids an assertion when re-adding the same pragma twice.
2018-11-06 11:59:41 +01:00
Vassil Vassilev
fc33c22f45 Bump clad version to v0.4.
The new release includes some improvements in both Forward and
Reverse mode:
  * Support `x += y`, `x -= y`, `x *= y`, `x /= y`, `x++`, `x--`, `++x`, `--x`
    in forward mode.
  * Reduce emission of unused expressions
  * Add a special `#pragma clad ON/OFF/DEFAULT` to annotate regions which
    contain derivatives
  * Various small optimizations

See more at: https://github.com/vgvassilev/clad/blob/v0.4/docs/ReleaseNotes.md
2018-11-06 11:59:41 +01:00
Axel Naumann
56186d6a2a Fix unused var warning. 2018-10-31 17:14:05 +01:00
Axel Naumann
c35914068e Veto ptrcheck for decls annotated with __cling__ptrcheck(off). 2018-10-31 08:44:39 +01:00
Axel Naumann
10a79e146e Do not check *this, even if implicitly cast.
(cherry picked from commit 1dd7ac75cf5ecc1ef91c5aa1cc2ba65c46e8d585)
2018-10-31 08:44:39 +01:00
Axel Naumann
778c416dc0 DynScopes: escape up to Stmt level (ROOT-9738). 2018-10-30 15:29:08 +01:00
Vassil Vassilev
69f1d35dd6 Revert "Revert "[cxxmodules] Publish MetaLexer too.""
This reverts commit 0f583c7ef0173fba1caa7680188e7bc767f5d97d.

We need this change because whoever uses MetaParser.h will not be
able to compile their program. MetaParser.h includes MetaLexer.h.
2018-10-30 15:14:45 +01:00
Vassil Vassilev
07d84fcec1 Revert "[cxxmodules] Publish MetaLexer too."
This reverts commit 20d116e723018bae496c7fb78fbeec22543d14c6.

We will have to debug the exact cxxmodules failure.
2018-10-30 09:59:09 +01:00
Vassil Vassilev
c178d80217 Enable timing counters in clang's frontend.
This feature can be enabled by setting an env variable ROOT_CLING_TIMING.
It prints some information about how much time different parts of clang
take.
2018-10-26 22:14:11 +02:00
Vassil Vassilev
084e96df4c Add a dependency on clangSema to clingInterpreter.
We use the target clingInterpreter in a few places as a
general dependency rule making sure the cling infrastructure is
already built.

In some cases, such as clad, the highly parallel builds trigger
build of clad before clangSema, clangBasic and clangAST are built.

This patch ensures the right dependencies are in order.
2018-10-26 09:44:19 +02:00
Vassil Vassilev
7330bcb819 Change the linkage of functions and template specializations.
static, static inline, always_inline, and extern inline functions can
always be deferred. Normal inline functions can be deferred in C99/C++.
Implicit template instantiations can also be deferred in C++.

This patch changes the linkage of the declarations from strong to weak.
It allows clang to defer the deserialization from pch/pcm until their use.
2018-10-26 09:44:18 +02:00
Vassil Vassilev
a47da9e9cd Publish MetaLexer too.
This fixes our cxxmodules builds.
2018-10-24 21:45:01 +02:00
Sylvain Corlay
7677fbc562 Make Meta Processor requirements public 2018-10-23 12:14:20 +02:00
Sylvain Corlay
7116e7239c Add missing libraries 2018-10-19 00:30:04 +02:00
Vassil Vassilev
cc57c1e08e 80 cols. 2018-10-16 16:59:55 +02:00
Yuka Takahashi
80fa13b41e Fix print.C
Remove semicolon to print out
2018-10-12 14:30:16 +02:00
Yuka Takahashi
d77a3252dc Fix print.C
ToString takes typename and an object pointer
2018-10-12 08:44:07 +02:00
Philippe Canal
ad59359390 Fix cling::Interpreter::compileFunction getting confused by trailing transactions.
This fixes https://sft.its.cern.ch/jira/browse/ROOT-9672 by having
cling::Interpreter::DeclareCFunction return the transaction containing the
compiled code.

With the previous code, cling::Interpreter::compileFunction will get confused by
transaction created during the callbacks executed during the
cling::IncrementalParser::commitTransaction of the main transaction.

Reproducer:

With a main composed of 'only':

int main(int argc, char ** argv)
{
  char const * class_string = (argc == 2) ? argv[1] : "std::vector<int>";
  auto const result [[gnu::unused]] = TClass::GetClass(class_string);
  return 0;
}

which is a representation of real use case (in a more complex setup) in ART.
We were getting:

Error in <TClingCallFunc::make_wrapper>: Failed to compile
  ==== SOURCE BEGIN ====
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wformat-security"
__attribute__((used)) extern "C" void __cf_0(void* obj, int nargs, void** args, void* ret)
{
   if (ret) {
      (*(TStreamerInfo**)ret) = new TStreamerInfo();
      return;
   }
   else {
      new TStreamerInfo();
      return;
   }
}
#pragma clang diagnostic pop
  ==== SOURCE END ====
Error in <TClingCallFunc::ExecT>: Called with no wrapper, not implemented!
Error in <TVirtualStreamerInfo::Factory>: The plugin handler for TVirtualStreamerInfo was found but failed to create the factory object!

The reason is that during TClingCallFunc::make_wrapper, the call to cling::Interpreter::compileFunction ends with:

    if (const llvm::GlobalValue* GV
        = getLastTransaction()->getModule()->getNamedValue(name))

However in the 'broken' case, the getLastTransaction does not return the transaction for the code being compiled by DeclareCFunction but instead the one used/created at:

#0  cling::IncrementalParser::endTransaction (this=0x4a2980, T=0x8c0fb0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/IncrementalParser.cpp:345
#1  0x00007fffeebc7899 in cling::Interpreter::PushTransactionRAII::pop (this=0x7fffffffcb00) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:111
#2  0x00007fffeebc785e in cling::Interpreter::PushTransactionRAII::~PushTransactionRAII (this=0x7fffffffcb00, __in_chrg=<optimized out>)
    at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:106
#3  0x00007fffeebeb659 in cling::LookupHelper::findScope (this=0x4a9dd0, className=..., diagOnOff=cling::LookupHelper::NoDiagnostics, resultType=0x7fffffffcd08, instantiateTemplate=false)
    at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/LookupHelper.cpp:466
#4  0x00007fffeeabe0df in TCling::CheckClassInfo (this=0x4a0550, name=<optimized out>, autoload=<optimized out>, isClassOrNamespaceOnly=<optimized out>)
    at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TCling.cxx:3630
#5  0x00007ffff7c3040d in TClass::Init (this=this@entry=0xdafd20, name=name@entry=0x7ffff7cb7638 "TGlobal", cversion=cversion@entry=2, typeinfo=typeinfo@entry=0x7ffff7d8b6d8 <typeinfo for TGlobal>, isa=isa@entry=0x477430,
    dfil=dfil@entry=0x7ffff7cb8cab "TGlobal.h", ifil=<optimized out>, dl=<optimized out>, il=<optimized out>, givenInfo=<optimized out>, silent=<optimized out>)
    at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TClass.cxx:1431
#6  0x00007ffff7c3a1b8 in TClass::TClass (this=0xdafd20, name=0x7ffff7cb7638 "TGlobal", cversion=<optimized out>, info=..., isa=0x477430, dfil=0x7ffff7cb8cab "TGlobal.h",
    ifil=0x7ffff7cccf88 "/local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TGlobal.cxx", dl=27, il=25, silent=false) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TClass.cxx:1273
#7  0x00007ffff7c3a72a in ROOT::CreateClass (cname=0x7ffff7cb7638 "TGlobal", id=id@entry=2, info=..., isa=isa@entry=0x477430, dfil=dfil@entry=0x7ffff7cb8cab "TGlobal.h",
    ifil=ifil@entry=0x7ffff7cccf88 "/local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TGlobal.cxx", dl=27, il=25) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TClass.cxx:5607
#8  0x00007ffff7c4b552 in ROOT::Internal::TDefaultInitBehavior::CreateClass (il=25, dl=27, ifil=0x7ffff7cccf88 "/local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TGlobal.cxx", dfil=0x7ffff7cb8cab "TGlobal.h",
    isa=0x477430, info=..., id=2, cname=<optimized out>, this=0x7ffff7da7508 <ROOT::Internal::DefineBehavior(void*, void*)::theDefault>) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/Rtypes.h:176
#9  ROOT::TGenericClassInfo::GetClass (this=0x7ffff7dab660 <ROOT::GenerateInitInstanceLocal(TGlobal const*)::instance>) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TGenericClassInfo.cxx:250
#10 0x00007ffff7b1a2d8 in TGlobal::Class () at /home/pcanal/root_builds/v6-14-00-patches/opt/core/base/G__Core.cxx:17156
#11 0x00007ffff7ac01de in TGlobal::IsA (this=0xee3bc0) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/TGlobal.h:48
#12 TGlobal::CheckTObjectHashConsistency (this=0xee3bc0) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/TGlobal.h:48
#13 0x00007ffff7be9dcd in TObject::CheckedHash (this=0xee3bc0) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/TObject.h:314
#14 THashTable::GetCheckedHashValue (this=0xe65a20, obj=0xee3bc0) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/THashTable.h:94
#15 THashTable::Add (this=0xe65a20, obj=0xee3bc0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/cont/src/THashTable.cxx:96
#16 0x00007ffff7be6bf1 in THashList::AddLast (this=this@entry=0x5be690, obj=obj@entry=0xee3bc0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/cont/src/THashList.cxx:100
#17 0x00007ffff7c4e0d1 in TListOfDataMembers::AddLast (this=0x5be690, obj=0xee3bc0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TListOfDataMembers.cxx:103
#18 0x00007ffff7ab8785 in TList::Add (obj=0xee3bc0, this=0x5be690) at /home/pcanal/root_builds/v6-14-00-patches/opt/include/TList.h:87
#19 TROOT::GetListOfGlobals (this=0x7ffff7da7a60 <ROOT::Internal::GetROOT1()::alloc>, load=load@entry=false) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/base/src/TROOT.cxx:1767
#20 0x00007fffeeab1058 in TCling::HandleNewDecl (this=0x4a0550, DV=0xedf238, isDeserialized=isDeserialized@entry=true, modifiedTClasses=...) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TCling.cxx:555
#21 0x00007fffeeabb785 in TCling::UpdateListsOnCommitted (this=0x4a0550, T=...) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TCling.cxx:6115
#22 0x00007fffeebd0103 in cling::MultiplexInterpreterCallbacks::TransactionCommitted (this=0x57fe20, T=...) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/MultiplexInterpreterCallbacks.h:76
#23 0x00007fffeed05d71 in cling::IncrementalParser::commitTransaction (this=0x4a2980, PRT=..., ClearDiagClient=true) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/IncrementalParser.cpp:532
#24 0x00007fffeed06399 in cling::IncrementalParser::Compile (this=0x4a2980, input=..., Opts=...) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/IncrementalParser.cpp:663
#25 0x00007fffeebcbc4e in cling::Interpreter::DeclareInternal (this=0x4a0f30, input=..., CO=..., T=0x7fffffffd680) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:1195
#26 0x00007fffeebca8e8 in cling::Interpreter::declare (this=0x4a0f30, input=..., T=0x7fffffffd680) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:823
#27 0x00007fffeebcb560 in cling::Interpreter::DeclareCFunction (this=0x4a0f30, name=..., code=..., withAccessControl=true) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:1096
#28 0x00007fffeebcb862 in cling::Interpreter::compileFunction (this=0x4a0f30, name=..., code=..., ifUnique=false, withAccessControl=true)
    at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/interpreter/cling/lib/Interpreter/Interpreter.cpp:1140
#29 0x00007fffeeafb83c in TClingCallFunc::compile_wrapper (withAccessControl=true, wrapper=..., wrapper_name=..., this=0xcf3c10) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TClingCallFunc.cxx:270
#30 TClingCallFunc::make_wrapper (this=this@entry=0xcf3c10) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TClingCallFunc.cxx:1096
#31 0x00007fffeeafbcb8 in TClingCallFunc::IFacePtr (this=this@entry=0xcf3c10) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TClingCallFunc.cxx:2233
#32 0x00007fffeeafbe83 in TClingCallFunc::ExecT<long> (address=0x0, this=0xcf3c10) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TClingCallFunc.cxx:2045
#33 TClingCallFunc::ExecInt (this=0xcf3c10, address=0x0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/metacling/src/TClingCallFunc.cxx:2065
#34 0x00007ffff7c56e8d in TMethodCall::Execute (this=0xd97710, object=<optimized out>, retLong=@0x7fffffffd958: 0) at /local2/pcanal/cint_working/rootcling/v6-14-00-patches/core/meta/src/TMethodCall.cxx:457
#35 0x0000000000401009 in TMethodCall::Execute(long&) ()
#36 0x00000000004010ea in long TPluginHandler::ExecPluginImpl<>() ()
#37 0x000000000040106d in long TPluginHandler::ExecPlugin<>(int) ()
#38 0x0000000000400e21 in mytest() ()
#39 0x0000000000400e92 in main ()
2018-10-12 00:29:48 +02:00
Yuka Takahashi
53476daf4b Fix printing test in Cling
Testsuit was actually looking at '"' for match, comparing literal 21
should be enough.
2018-10-10 14:59:07 +02:00
Vassil Vassilev
38eb2b89ba Allow plugins to handle custom pragmas.
This will help clad implement pattern such as:
#pragma clad on
// code which needs derivation
#pragma clad off
2018-10-08 21:44:55 +02:00
Vassil Vassilev
8b925f1c64 Fix a potential null dereference.
The bug was discovered by running runarray1 test in runtime_cxxmodules mode.
2018-10-06 14:43:29 +02:00
Yuka Takahashi
9c7abadde0 Implement toString interface to gInterpreter
This is the final version of "printValue" discussion.

We agreed that printValue interface should be altered to ToString
interface, which can be invoked `gInterpreter->ToString(XYZ)`. (ToString is in TCling and toString is in Interpreter :D)

This patch contains:

- Implementation of toString in Interpreter.cpp
- Re-Implementation of ClingPrintValue to use ToString because I changed to use Evaluate some time ago.
- Removing of RVec version of printValue which wasn't used at all
- Fix test/vecops_rvec.cxx, printValue is never supposed to be called by a normal user.
2018-10-04 17:13:34 +02:00
Bertrand Bellenot
2fbb8cb0f1 Don't use VirtualQuery to check if the memory is valid
Calling VirtualQuery() is very expansive. For example, the testUnfold5a.C tutorial (interpreted) times out after 3600 seconds, and runs in about 60 seconds without calling VirtualQuery(). So just bypass it and return true for the time being
2018-10-03 17:43:41 +02:00
Vassil Vassilev
818126599b Also update the version on unix.
This is part of 4ff4d9aa2d.
2018-09-30 20:59:41 +02:00
Vassil Vassilev
628288faee Bump clad version to v0.3.
The new release includes some improvements in both Forward and
Reverse mode:
  * Better correctness of C++ constructs -- handle scopes properly; allow proper
  variable shadowing; and preserve namespaces.
  * Efficient evaluation in forward mode.
  * Reduced cloning complexity.
  * Handle more C++ constructs -- variable reassignments and for loops.

See more at: https://github.com/vgvassilev/clad/blob/v0.3/docs/ReleaseNotes.md
2018-09-28 21:29:14 +02:00
Axel Naumann
0a416cd1ed Inject -isysroot ${CMAKE_OSX_SYSROOT} to clad. 2018-09-28 17:43:44 +02:00
Axel Naumann
c23abbc88b Force the OSX SDK to be the one at build time:
Fixes builds with command line tools and macos 10.14.
2018-09-26 20:29:22 +02:00
Axel Naumann
2847412de4 Use TLS for pointer check cache:
With 16 threads, the cache is simply too small.
These are thread specific values anyway.
2018-09-26 11:44:10 +02:00
Bertrand Bellenot
4ed58df12d Fix lookup of Visual Studio directories + improve error messages
Visual Studio 2017 doesn't use the registry anymore, so no need to try to find keys. This prevent picking wrong directories in the case there is another version installed on the computer, and prevent also the following errors when starting ROOT:
  RegQueryValueEx: returned 2: The system cannot find the file specified.
  RegOpenKeyEx: returned 2: The system cannot find the file specified.
2018-09-25 15:29:09 +02:00
Yuka Takahashi
973ae34948 Revert "[cxxmodule] Fix nightlies (#2577)"
This reverts commit 316f553538d2474c566e0b5460ce79d90e3028c0.
2018-09-25 09:28:53 +02:00
Danilo Piparo
a9160b6374 Fix tag lookup test 2018-09-24 09:58:50 +02:00
Danilo Piparo
f2b6205182 Remove fatal typo in tag lookup tests 2018-09-24 09:13:47 +02:00
Danilo Piparo
333bf59b14 Fix Tag test: the test failed because of a typo
the tag called "E" was looked for but its name tested against the
string "N"
2018-09-22 09:59:07 +02:00
Danilo Piparo
4d3fa7427b Add test for the Tag lookup helpers. 2018-09-22 09:14:48 +02:00
Danilo Piparo
7499f98cf9 Avoid symbol of helper function to be exposed, code-quality. 2018-09-22 09:14:48 +02:00
Danilo Piparo
65cea92ce8 Fix ROOT-6967: add helper functions to lookup tags
efficiently and not variables.
2018-09-22 09:14:48 +02:00
Danilo Piparo
4bc0095e0c Remove file which was left there by 693624 2018-09-04 15:29:06 +02:00
Danilo Piparo
38aaadb109 Revert to 316f55 2018-09-04 15:14:06 +02:00
Danilo Piparo
6cf8065b34 Revert "Merge branch 'master' of github.com:root-project/root"
This reverts commit 5993be607f0c98dbe1288f6c69362dbda59d5e4a, reversing
changes made to f6b7559258cec1bf1dd875eb6c5a5a9d87ec9c3d.
2018-09-04 14:59:13 +02:00
Yuka Takahashi
5cfd6eb61f Fix nightlies (#2577)
* Revert "[cmake] Narrow the list of included directories."

This reverts commit 88c16588108508eff66cc160d244c4a59eb157ed.

* Revert "[cxxmodules] Build cling runtime into module."

This reverts commit 76a9ce75d2c29c169812b0816163ac7ce27ffad5.
2018-09-04 13:44:40 +02:00
Vassil Vassilev
f0a7454b53 Fix nightly builds.
This patch splits the headers required at both compile time and runtime.
The Cling_Runtime_Extra module does not require __CLING__ to be defined.
It allows the headers from it to be included at compile time as well
where we do not have __CLING__ defined.
2018-08-28 10:14:10 +02:00
Vassil Vassilev
1670e412ad Build cling runtime into module.
The improvement is by 20% from (260MB to 210MB) and within the reach of the PCH.
2018-08-27 22:44:35 +02:00