Commit Graph

1622 Commits

Author SHA1 Message Date
Boris Perovic
688ad34b3f Minor fixes around printValue, based on comments after the integration. 2015-08-18 18:08:17 +02:00
Boris Perovic
62c71df1fa Minor fix: print type + " " + value, rather than type" " + value. 2015-08-17 18:45:03 +02:00
Boris Perovic
c44940b223 New printValue() integration (printing unified through overloading of printValue() function and template resolution). Modified tests to conform to the new prints. 2015-08-17 18:45:03 +02:00
Boris Perovic
187cbaf257 Do not randomly add to lookup results during EvaluateT(). 2015-08-17 18:45:03 +02:00
Philippe Canal
1330bd1fe4 Fix ROOT-7462 (extend fix for ROOT-6070)
Original problem:

set atlas shell environment
root.exe
   TFile *_file0 = TFile::Open("atlasfile.root");

bunch of Warning about missing dictionary

   c = TClass::GetClass("GaudiCommon<Algorithm>")

Error in <TProtoClass::FindDataMember>: data member with index 0 is not found in class GaudiUtils::Map<string,SmartIF<IService>,__gnu_cxx::hash_map<string,SmartIF<IService>,GaudiUtils::Hash<string>,equal_to<s
tring>,allocator<SmartIF<IService> > > >
Error in <CreateRealData>: Cannot find data member # 0 of class GaudiUtils::Map<string,SmartIF<IService>,__gnu_cxx::hash_map<string,SmartIF<IService>,GaudiUtils::Hash<string>,equal_to<string>,allocator<SmartI
F<IService> > > > for parent GaudiCommon<Algorithm>!

   c->GetListOfRealData()->ls();

...
OBJ: TRealData m_services      Description of persistent data members : 0 at: 0x9d46d70
OBJ: TRealData m_errors        Description of persistent data members : 0 at: 0x9d47cb0
...

Tweak of the problem:

  c = TClass::GetClass("GaudiCommon<Algorithm>");
  c->GetListOfRealData()->ls();

...
OBJ: TRealData m_services      Description of persistent data members : 0 at: 0x300ce10
OBJ: TRealData m_services.     Description of persistent data members : 0 at: 0x300e9c0
OBJ: TRealData m_errors        Description of persistent data members : 0 at: 0x300eaa0
...

Note: no error or warning but the ListOfRealData is 'wrong'.

Correct behavior:

   TClass::GetClass("SmartIF<IService>");
   TFile *_file0 = TFile::Open("atlasfile.root");
TClass::GetClass("GaudiUtils::Map<string,SmartIF<IService>,__gnu_cxx::hash_map<string,SmartIF<IService>,GaudiUtils::Hash<string>,equal_to<string>,allocator<SmartIF<IService> > > >");
   c = TClass::GetClass("GaudiCommon<Algorithm>");
   c->GetListOfRealData()->ls();

...
OBJ: TRealData m_services      Description of persistent data members : 0 at: 0xc81c820
OBJ: TRealData m_services.m_map        Description of persistent data members : 0 at: 0xc81dd00
OBJ: TRealData m_errors        Description of persistent data members : 0 at: 0xc81ddb0
...

See autoparse for
unary_function<pair<const string,SmartIF<IService> >,const string>
SmartIF<IService>

Analysis:
  1) Opening the file triggering the autoloading of a lots of libraries and the autoparsing of many files.
     This includes the declaration of Gaudi::Map but *not* of SmartIF nor SmartIF<IService>.
     [Side note: this autoloading is due to DataVector<xAOD::Jet_v1> not having a dictionary]
  2) During TClass::GetClass("GaudiCommon<Algorithm>"), the TProtoClass::FillTClass is called and
     disable autoloading and autoparsing and then request the GaudiUtils::Map
  3) Since there is no dictionary for GaudiUtils::Map, findScope is invoked.
  4) During findScope, the instantiation of GaudiUtils::Map fails with an error similar to:
        error: field has incomplete type 'SmartIF<IService>'
  5) The error handling code path in this case in findScope did *not* revert the transaction
     and unload the 'invalid' decl for the GaudiUtils::Map
  6) TClingClassInfo assume all decl are valid but finds and use the invalid decl
  7) In this case, the invalidity of the decl leads to a lack of data members
  8) Thus TProtoClass::FindDataMember complains about the discrepency between the TProtoClass
     information and the information from the decl.

Requesting the TClass for the GaudiUtils::Map when autoloading and autoparsing are leads
to the proper instantiation and thus success.

Requesting the TClass for GaudiCommon<Algorithm> before loading the file means that
when the request for the TClass for GaudiUtils::Map is done, the declaration for
GaudiUtils::Map has not yet been parsed and thus findScope use a different error
handling code path (one where the instantiation is not even attempted).

In normal circunstances (all dictionary properly generated and loaded/loadable),
the missing name part in the list of real data member is not fatal (it would be
if it was the case during the initial gathering of information but as it is, all
the necessary information is already in the rootpcm files).
2015-08-17 18:45:03 +02:00
Axel Naumann
e2f9cf80cd Assert to error: cannot autoload that, its declaring header cannot be found at runtime! 2015-08-17 18:45:03 +02:00
Pere Mato
768254099f Enable C++14 in Cling when compiling with C++14 enabled 2015-08-17 18:45:02 +02:00
Pere Mato
5e5af173cf Forward the c++14 flag to building LLVM/CLING. Enable c++14 in the interpreter if compiled with -std=c++1y or -std=c++14. 2015-08-17 18:45:02 +02:00
Axel Naumann
2a73fc3b9e Grab lang, PP, target opts from PCH if it exists. 2015-08-17 18:45:02 +02:00
Axel Naumann
a0618d59f4 whitespace. 2015-08-17 18:45:02 +02:00
Axel Naumann
7217f8099b Silence *calling* unresolved symbols. Handing it out already complains. 2015-08-17 18:45:02 +02:00
Axel Naumann
714df9c374 Revert "Annotate fwd decls with the header containing the decl, not the top-most include."
This reverts commit 125a93e0e3562dac5d5a0429ce49a2b625025c26.
It fails in the following case (roottest/root/io/evolution/pragma_read):
dictionary for a/b.h which includes a/c.h as #include "c.h"
This will add a fwd decl with annotation "c.h", but this header cannot
be found. Instead we'd need "a/c.h"...
2015-06-23 21:30:17 +02:00
Axel Naumann
cfd091955e Pass pthread to CIFactory; enable it in LangOpts. 2015-06-23 21:30:17 +02:00
Axel Naumann
3d4bb2b954 Fix fwd-decl detection and loops. 2015-06-23 11:13:16 +02:00
Axel Naumann
13dae8ee6b The RecursiveASTVisitor now calls Visit of bases itself. 2015-06-23 11:13:16 +02:00
Axel Naumann
1718483b7e Unload fwd decls of enums; redeclaring definitions fails. 2015-06-23 11:13:16 +02:00
Axel Naumann
4834289abd Annotate fwd decls with the header containing the decl, not the top-most include. 2015-06-18 16:01:47 +02:00
Bertrand Bellenot
3eed26e5a5 Fix load error reported on the forum (https://root.cern.ch/phpBB3/viewtopic.php?f=21&t=19840) 2015-06-17 10:50:29 +02:00
Bertrand Bellenot
b5b37f564c Add a funtion to check if a file is a DLL, using proper WIN32 API 2015-06-09 17:22:06 +02:00
Axel Naumann
1c190f711f RevertTransaction() changes parent: assert on m_Transactions.back() first. 2015-06-09 11:03:18 +02:00
Axel Naumann
331a71cd2d Provide a valid SourceLoc - template instantiation needs it (ROOT-7364). 2015-06-08 18:10:01 +02:00
Axel Naumann
dc2047e7c4 Replace Transaction::reset() by ~Transaction(). Replace RefillPool by new Transaction.
Simplifies code, removes duplication.
2015-06-08 14:58:29 +02:00
Axel Naumann
886f586b08 Add assert; spelling. 2015-06-08 14:58:27 +02:00
Axel Naumann
439869b8c2 Use magic ExeUnload handle to tag "nothing to be unloaded".
This disambiguates a transaction without JITted module from one with JITted code.
Only the latter should be unloaded.
2015-06-08 14:58:27 +02:00
Axel Naumann
44ee56b7a1 Also unload modules that are queued for JITting. 2015-06-08 14:58:25 +02:00
Axel Naumann
14719848cc Do not shadow parameter name (Coverity 60786). 2015-06-07 20:54:00 +02:00
Axel Naumann
7b0cae3aef Use non-shadowing param name (Coverity 61660). 2015-06-07 20:53:59 +02:00
Axel Naumann
926f9072ea Unbalanced store/compare can be usage error; diagnose, not assert. 2015-06-07 20:38:15 +02:00
Elisavet Sakellari
bfa9947c5a Implement search path cling pragma / ROOT macros (ROOT-7269). 2015-06-04 16:40:08 +02:00
Axel Naumann
a1d3eabd7e Revert "Remove dupe code: CurT->setIssuedDiags() already done in endTransaction()."
ParseResult could be failure withous Diags noticing.

This reverts commit 6d0a73cb0acb3cbb62460759bc17e85ff9aba53f.
2015-06-04 12:05:04 +02:00
Axel Naumann
816232980c Delay resetting Diags until the Module has been released by Codegen. 2015-06-04 09:56:12 +02:00
Axel Naumann
6fc85c1883 Remove dupe code: CurT->setIssuedDiags() already done in endTransaction(). 2015-06-04 09:56:10 +02:00
Axel Naumann
aa24ff9e20 Do not leak on error (Coverity). 2015-06-03 11:01:27 +02:00
Bertrand Bellenot
15dda8ada2 Fix object format on Windows (thanks Axel for the hint!)
Solves the following error on Windows (as reported on the forum: https://root.cern.ch/phpBB3/viewtopic.php?f=21&t=19033):
[cling]$ int i = 0;
>>> Caught an interpreter exception!
>>> Incompatible object format!
2015-05-28 15:17:02 +02:00
Axel Naumann
7db73eb500 Reduce cling leakage to 0, according to valgrind. 2015-05-27 18:00:09 +02:00
Axel Naumann
9b61560c4a Extra paren against hex address followed by a dot. 2015-05-24 21:55:24 +02:00
Liza
99de1fe5c0 ROOT-7031 bug fix for illegal macros. 2015-05-21 20:24:10 +02:00
Axel Naumann
4ebef94da8 Unwrap (implicit) casts for fwd decls (ROOT-7276). 2015-05-18 15:24:09 +02:00
Bertrand Bellenot
4d4a4b1270 Fix compilation error on Windows (MSVC doesn't support m_AtExitFuncsSpinLock = ATOMIC_FLAG_INIT; in the class definition) 2015-05-18 11:42:19 +02:00
Axel Naumann
25b4369647 Only emit Value return placement new for CallInit (ROOT-7310). 2015-05-13 12:12:00 +02:00
Axel Naumann
5aa38ee07a Enable new GCC 5.1 ABI. 2015-05-08 01:06:49 +02:00
Axel Naumann
ea307f050c Factor out PP binary and target defines. 2015-05-08 01:06:49 +02:00
Philippe Canal
2fc94b3fa9 Remove code duplication 2015-04-17 02:50:36 +02:00
Philippe Canal
e216aea985 Add __CLING__clang__ and __CLING__GNUC__.
Those macros are define only in 'interpreted' code and respectively
only if cling itself was built with clang or gcc.
2015-04-16 08:44:51 +02:00
Axel Naumann
219d68f641 More performant version of getting the underlying type. 2015-04-09 17:18:30 +02:00
Axel Naumann
397f6fb9e9 Fix warning; make determineStorageType() static. 2015-04-07 09:39:25 +02:00
Axel Naumann
ca9ac1961f Accelerate costly Value functions by storing results. 2015-04-06 21:30:19 +02:00
Axel Naumann
474d518615 Attooptimization. 2015-04-04 21:05:14 +02:00
Bertrand Bellenot
9532d5481e Add missing include 2015-04-02 10:18:06 +02:00
Axel Naumann
8552299b66 Support DynamicLookup test resolver not resolving anything. 2015-04-01 12:09:19 +02:00
Axel Naumann
61291c5113 Support CXXDependentScopeMemberExpr for EvalT (ROOT-7163). 2015-04-01 12:09:17 +02:00
Axel Naumann
c4a8f069d3 Register $PWD with its full name (ROOT-7114). 2015-03-25 20:03:28 +01:00
Axel Naumann
3136974871 Fix doxygen warnings. 2015-03-20 15:45:03 +01:00
Axel Naumann
c431fc9d3e Make debug symbols optional (.debug). 2015-03-20 15:39:23 +01:00
Axel Naumann
bf6f3df7c7 The llvm::JITEventListener is lifetime managed by llvm. 2015-03-20 15:39:23 +01:00
Axel Naumann
fe866a3d2a Provide (possibly updated) CodegenOpts to StartModule. 2015-03-20 15:39:23 +01:00
Axel Naumann
0d497b513f Only CodeGen::HandleTU for topmost transactions. 2015-03-20 15:39:23 +01:00
Axel Naumann
ad16c82748 Enable debug info in CodeGenOptions. 2015-03-20 15:39:23 +01:00
Axel Naumann
fa03cc7c5a Hand JITed symbols to GDB. 2015-03-20 15:39:23 +01:00
Axel Naumann
8497d89e4a Spell !.size() as .empty(). 2015-03-20 12:43:51 +01:00
Axel Naumann
1d2d6e8650 No need for a nested transaction while parent is collecting! 2015-03-20 12:43:51 +01:00
Axel Naumann
c245203e7f Rollback: inform new end that next is gone. Simplify assert. 2015-03-20 12:43:51 +01:00
Axel Naumann
fa573cf5de Inform commitTransaction() about the ParseResult. 2015-03-18 15:15:01 +01:00
Axel Naumann
1202db7aa7 Store error state in Transaction; DeclCollect even on error (to be able to unload). 2015-03-17 14:06:41 +01:00
Axel Naumann
f0e446aedf Do not emit if there are parse or trnasformation errors. 2015-03-17 14:06:40 +01:00
Axel Naumann
5a26caa30a Also capture errors from ASTTransformers. 2015-03-16 20:59:38 +01:00
Axel Naumann
4fe3173737 Delay Diags reset until commit which still needs it. 2015-03-16 20:31:44 +01:00
Axel Naumann
c282dcb4e7 Also commit (finalize) Transactions that have errors. 2015-03-16 20:14:49 +01:00
Axel Naumann
b5f1143670 Reset Diags once the are captured in EParseResult (cling tests). 2015-03-16 20:14:47 +01:00
Axel Naumann
75cb48f78b We like empty transactions. 2015-03-16 18:04:40 +01:00
Axel Naumann
690d4b0578 Rename ASTTransformer.h -> TransactionTransformer.h. 2015-03-16 15:24:52 +01:00
Axel Naumann
fc9b3aa997 Separate Transaction* and parser success: a nullptr Transaction* was ambiguous. 2015-03-16 14:58:58 +01:00
Axel Naumann
b8e2f69b7c Do not reset diagnostics in unloader; caller might need to know! 2015-03-16 14:58:58 +01:00
Axel Naumann
260f8d4f2a Now that parsing also emits, non-parsed Decls need to be emitted "by hand". 2015-03-16 14:58:58 +01:00
Axel Naumann
166032069e Emit Decls as DeclCollector sees them.
Now that we can easily revert Transactions' IR (by unloading their
module) we do not need to queue the Decls before emitting them.
This enables EndOfTU actions to be emitted seeminglessly, without
extra transactions, or explicit post-EndOfTU-emission: each
Transaction will have its TU finalized exactly once.

This in turn allows us to turn on Debug emission - which relies on
being invoked exactly once per Module.

Transformers must be invoked before emitting Decls. They are now
invoked for each Decl; WrapperTransformers are invoked when seeing
a wrapper decl. They do not see the "full transaction AST" anymore
- luckily none of our transformers requires this and actually become
simpler because of this change.

This also fixes a bug where the relative sequencing of parsed and
deserialized Decls was lost (parsed was emitted before deserialized).

Remove unused IRTransactions; they should really be llvm::Pass-es.
We don't have them anyway.

Disable a few transformations if the Decl isFromASTFile.

When reverting a Transaction, also revert its nested ones.

In the ValueExtractionSynthesizer, pass the ValuePrinter option as
int, instead of the transaction pointer - that might have changed
(at least its options) by the time we invoke the wrapper.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i or -o; assuming --only paths...
# rebase in progress; onto b3d9f92
# You are currently splitting a commit while rebasing branch 'declcollector-emits-v2' on 'b3d9f92'.
#
# Changes to be committed:
#	modified:   interpreter/cling/include/cling/Interpreter/RuntimeUniverse.h
#	modified:   interpreter/cling/lib/Interpreter/AutoSynthesizer.cpp
#	modified:   interpreter/cling/lib/Interpreter/AutoSynthesizer.h
#	modified:   interpreter/cling/lib/Interpreter/CheckEmptyTransactionTransformer.cpp
#	modified:   interpreter/cling/lib/Interpreter/CheckEmptyTransactionTransformer.h
#	modified:   interpreter/cling/lib/Interpreter/DeclCollector.cpp
#	modified:   interpreter/cling/lib/Interpreter/DeclCollector.h
#	modified:   interpreter/cling/lib/Interpreter/DeclExtractor.cpp
#	modified:   interpreter/cling/lib/Interpreter/DeclExtractor.h
#	modified:   interpreter/cling/lib/Interpreter/DynamicLookup.cpp
#	modified:   interpreter/cling/lib/Interpreter/DynamicLookup.h
#	modified:   interpreter/cling/lib/Interpreter/IncrementalParser.cpp
#	modified:   interpreter/cling/lib/Interpreter/IncrementalParser.h
#	modified:   interpreter/cling/lib/Interpreter/NullDerefProtectionTransformer.cpp
#	modified:   interpreter/cling/lib/Interpreter/NullDerefProtectionTransformer.h
#	modified:   interpreter/cling/lib/Interpreter/TransactionTransformer.cpp
#	modified:   interpreter/cling/lib/Interpreter/TransactionTransformer.h
#	modified:   interpreter/cling/lib/Interpreter/TransactionUnloader.cpp
#	modified:   interpreter/cling/lib/Interpreter/ValueExtractionSynthesizer.cpp
#	modified:   interpreter/cling/lib/Interpreter/ValueExtractionSynthesizer.h
#	modified:   interpreter/cling/lib/Interpreter/ValuePrinterSynthesizer.cpp
#	modified:   interpreter/cling/lib/Interpreter/ValuePrinterSynthesizer.h
#
# Untracked files:
#	.idea/
#	0001-Fix-llvm-merge-issue.patch
#	0002-Fix-warnings.patch
#	0003-Keep-weak-symbols-around-subsequent-transactions-mig.patch
#	T.cxx
#	T.cxx~
#	TMVA.root
#	a.out
#	boost.root
#	config/Makefile.depend~
#	core/textinput/src/textinput/TerminalDisplayWin.cpp.orig
#	ct.root
#	data.root
#	interpreter/cling/76fc2055249da7b03148a7d4197a279e9943f012.patch
#	interpreter/cling/lib/Interpreter/CIFactory.cpp~
#	interpreter/cling/lib/Interpreter/DeclCollector.h~
#	interpreter/cling/lib/Interpreter/DynamicLibraryManager.cpp~
#	modulemap-one-header-per-file.txt
#	osrm-routed
#	tiles.tar.bz2
#	tmva_class_example.root
#	tutorials/v3.root
#	weights/
#
2015-03-16 14:58:58 +01:00
Axel Naumann
7e1e0fe82d Parse DynamicLookupRuntimeUniverse.h with DynamicLookup disabled. 2015-03-16 14:58:57 +01:00
Axel Naumann
d7fe2ccc90 Remove unused file. 2015-03-16 14:58:57 +01:00
Philippe Canal
cac03e9080 Coding conventions 2015-03-16 13:12:47 +01:00
Philippe Canal
5842d86a2f Protect IncrementalExecutor::m_AtExitFuncs with a spin lock.
This prevents:

==4150== Possible data race during write of size 8 at 0xCC136F0 by thread #3
==4150== Locks held: none
==4150==    at 0x146EC214: llvm::SmallVectorTemplateBase<cling::IncrementalExecutor::CXAAtExitElement, false>::grow(unsigned long) (in /afs/cern.ch/cms/sw/ReleaseCandidates/volB/slc6_amd64_gcc491/lcg/root/6.02.00-lnjiaj2/lib/libCling.so)
==4150==    by 0x146E9DE3: cling::IncrementalExecutor::AddAtExitFunc(void (*)(void*), void*, cling::Transaction const*) (in /afs/cern.ch/cms/sw/ReleaseCandidates/volB/slc6_amd64_gcc491/lcg/root/6.02.00-lnjiaj2/lib/libCling.so)
==4150==    by 0x160A5044: ???
==4150==    by 0x160A67D6: ???
==4150==    by 0x160A6783: ???
==4150==    by 0x145E76D3: TCling::ExecuteWithArgsAndReturn(TMethod*, void*, void const**, int, void*) const (in /afs/cern.ch/cms/sw/ReleaseCandidates/volB/slc6_amd64_gcc491/lcg/root/6.02.00-lnjiaj2/lib/libCling.so)

Conflicts:
	interpreter/cling/lib/Interpreter/IncrementalExecutor.cpp
2015-03-14 03:10:54 +01:00
Philippe Canal
397921f678 Add cling::internal::SpinLockGuard 2015-03-14 03:10:53 +01:00
Axel Naumann
94dace589c Lookups can deserialize / instantiate and need Transactrions. 2015-03-10 12:02:03 +01:00
Axel Naumann
cda81151ce Fix stringify. Indentation. Version quote for standalone cling. 2015-03-06 20:15:32 +01:00
Pere Mato
61112a0f7b Changes needed to make Xcode generation working 2015-03-05 22:53:33 +01:00
Bertrand Bellenot
fbb08ff4e5 From Axel: Fix for late template parsed functions (Microsoft feature) 2015-02-26 12:29:17 +01:00
Bertrand Bellenot
c2224aeff7 Enable asm parser in cling
Use PROJECT_SOURCE_DIR (full path to the root of the project source directory) instead of CMAKE_SOURCE_DIR (the directory from which cmake was started) in order to properly find AsmParser/CMakeLists.txt and call llvm::InitializeNativeTargetAsmParser();
2015-02-25 11:21:31 +01:00
Axel Naumann
9729c6b1f6 Use LLVM_ON_WIN32 instead of WIN32 CPP macro. 2015-02-23 00:31:28 +01:00
Axel Naumann
99a5488e9f Check that the pointer is valid before printing (ROOT-7095). 2015-02-23 00:03:26 +01:00
Axel Naumann
faf2b44a0d Tell which language is enabled (ROOT-7090). 2015-02-21 23:15:27 +01:00
Axel Naumann
e582b93a16 No #include <new> in C mode; add basic C mode test (ROOT-7090). 2015-02-21 22:43:36 +01:00
Axel Naumann
69234ce153 Fix nullptr value printing (ROOT-7092). 2015-02-21 22:27:26 +01:00
Axel Naumann
0e1c818da1 Implement loading of MachO universal bins (e.g. Frameworks). 2015-02-21 12:29:35 +01:00
Axel Naumann
ff65075668 Implement unloading of transactions that are nested below uncommitted ones. 2015-02-18 14:51:21 +01:00
Axel Naumann
39e505288b Improve and re-use existing addTransaction(). 2015-02-18 14:51:21 +01:00
Axel Naumann
1ffc20a6b2 Add a cling pragma handler. For now implement #pragma cling load(file)
Extremely handy for sources that require certain libraries to be loaded;
it's similar to MSVC's #pragma comment(lib"libToLink").
2015-02-18 14:51:21 +01:00
Axel Naumann
430a9c7473 Add non-const getParser(). 2015-02-18 14:51:21 +01:00
Bertrand Bellenot
c70c555b26 From Axel: Forward eof on Windows and assert on non-Windows platforms 2015-02-17 09:55:19 +01:00
Axel Naumann
381a62b1cf Do not interpret /Users/... as /U sers; fixes MacOS cling tests. 2015-02-14 22:16:15 +01:00
Axel Naumann
39dbb9b6fd Fix doxygen warning. 2015-02-14 14:11:35 +01:00
Axel Naumann
99ebb91b5f Fix constness warning. 2015-02-13 20:30:17 +01:00
Bertrand Bellenot
694c772e39 Fix crash (assertion failure) on Windows
Late parsed templates (Microsoft specific) can leave unswallowed "macro"-like tokens. They will seriously confuse the Parser when entering the next source file. So lex until we are EOF.
2015-02-13 16:53:13 +01:00