Justin Bogner
1a9ca774b6
TableGen: Avoid undefined behaviour by doing this shift in int64
...
Found by ubsan. This was taking a bool and left shifting by 32 - the
result is 64 bit, so we should really do the math in a type it fits
in.
llvm-svn: 237345
2015-05-14 06:47:02 +00:00
Craig Topper
b1846a352e
[TableGen] Remove an unnecessary outer 'if' around 3 separate inner ifs. No functional change intended.
...
The outer if had 3 separate conditions ORed together and then the inner ifs detected which of the three conditions it was by using only a portion of the specific condition. Just put the whole condition in each inner if and remove the outer if.
llvm-svn: 237343
2015-05-14 05:54:02 +00:00
Craig Topper
42467f25e4
[TableGen] Simplify some code. NFC
...
llvm-svn: 237342
2015-05-14 05:53:59 +00:00
Craig Topper
ec9072d661
[TableGen] Replace some calls to ListInit::getSize() with ListInit::empty() if it was just comparing to 0. NFC.
...
llvm-svn: 237340
2015-05-14 05:53:53 +00:00
Craig Topper
607ac92dcb
Use ArrayRef::slice instead of manually constructing an ArrayRef from ArrayRef iterators. NFC
...
llvm-svn: 237231
2015-05-13 06:57:51 +00:00
Craig Topper
a0ff540b7e
Remove unnecessary variables by folding calls into for loop header. NFC.
...
llvm-svn: 237090
2015-05-12 05:25:10 +00:00
James Y Knight
e452e27129
Fix tablegen's PrintFatalError function to run registered file
...
cleanups.
Also, change code in tablegen which printed a message and then called
"exit(1)" to use PrintFatalError, instead.
This fixes instances where an empty output file was left behind after
a failed tablegen invocation, which would confuse subsequent ninja
runs into not attempting to rebuild.
Differential Revision: http://reviews.llvm.org/D9608
llvm-svn: 237058
2015-05-11 22:17:13 +00:00
Craig Topper
23fdafe682
[TableGen] Replace 'static_cast' with 'cast'.
...
llvm-svn: 236398
2015-05-04 01:35:42 +00:00
Craig Topper
a9642b4ec8
[TableGen] Formatting cleanup. Mostly removing trailing whitespace and unnecessary curly braces. NFC
...
llvm-svn: 236397
2015-05-04 01:35:39 +00:00
Craig Topper
85c07007ea
[TableGen] Cleanup formatting by moving operators from beginning of line to end of previous line. NFC
...
llvm-svn: 236206
2015-04-30 05:54:22 +00:00
Craig Topper
9ed595e41d
[TableGen] Used range-based for loop. NFC.
...
llvm-svn: 236205
2015-04-30 05:54:20 +00:00
Craig Topper
9ef76499b2
[TableGen] Merge a variable assignment and a return to drop curly braces. Fold an assignment into an if. Use auto on the result of a couple dyn_casts. NFC
...
llvm-svn: 236204
2015-04-30 05:12:52 +00:00
Craig Topper
119998dbf1
[TableGen] Use range-based for loops. NFC.
...
llvm-svn: 236089
2015-04-29 07:13:14 +00:00
Craig Topper
39ba33b8f0
[TableGen] Fold a couple dyn_casts into the ifs that check their results. NFC
...
llvm-svn: 236088
2015-04-29 07:13:12 +00:00
Craig Topper
ed5a950808
[TableGen] Replace some dyn_casts followed by an assert with just a regular cast which asserts internally. NFC
...
llvm-svn: 236087
2015-04-29 07:13:05 +00:00
Craig Topper
eb4d7c6b70
[TableGen] Use range-based for loops. NFC
...
llvm-svn: 236083
2015-04-29 04:43:36 +00:00
Craig Topper
ba6057de71
[TableGen] Don't leak Expanders and Operators in SetTheory.
...
llvm-svn: 235697
2015-04-24 06:49:44 +00:00
Craig Topper
17b3a378c5
[TableGen] Fix all remaining memory leaks of Init and RecTy objects.
...
llvm-svn: 235696
2015-04-24 05:38:48 +00:00
Craig Topper
1f429e4926
[TableGen] Use range based for loops.
...
llvm-svn: 235482
2015-04-22 05:27:47 +00:00
Craig Topper
d05991304b
[TableGen] Remove some deletes that violate ownership semantics. These don't seem to execute in our codebase today and date back to a time when there was an allocation in this function.
...
llvm-svn: 235481
2015-04-22 05:27:11 +00:00
Craig Topper
fe0cdf9899
[TableGen] Make BitRecTy::baseClassOf return true when RHS is an IntRecTy.
...
Previously the code was accidentally checking if 'this' was an IntRecTy which it can't be since 'this' is a BitRecTy. Looking back at the history it appears it was intended to check RHS.
llvm-svn: 235477
2015-04-22 04:18:32 +00:00
Craig Topper
e8005f90f5
Don't use 'nullptr' in comment. Just use 'null'.
...
llvm-svn: 235476
2015-04-22 04:18:27 +00:00
Craig Topper
b534eabf9e
Revert "[TableGen] Use cast instead of dyn_cast where result isn't checked before being dereferenced."
...
Turns out I misread the parentheses. Though I'm pretty sure its always a RecordRecTy and non of the callers really seem to expect null. But until I'm completely sure I'm going to revert this.
llvm-svn: 235469
2015-04-22 02:59:06 +00:00
Craig Topper
c7a9cfb7f6
Fix stale comment that mentioned 0 instead of nullptr. NFC.
...
llvm-svn: 235468
2015-04-22 02:59:03 +00:00
Craig Topper
0e04bee8df
[TableGen] Remove Pool helper class and just use unique_ptr in the maps.
...
llvm-svn: 235467
2015-04-22 02:20:44 +00:00
Craig Topper
b15012bc6b
[TableGen] Use StringRecTy::get() instead of allocating (and leaking) a StringRecTy object.
...
llvm-svn: 235466
2015-04-22 02:09:47 +00:00
Craig Topper
1bf3d1f5dd
[TableGen] Use 'isa' to identify UnsetInits rather than comparing with the singleton object created by UnsetInit::get(). Makes it more consistent with the other types.
...
llvm-svn: 235465
2015-04-22 02:09:45 +00:00
Craig Topper
f8344c60a6
[TableGen] Use cast instead of dyn_cast where result isn't checked before being dereferenced.
...
llvm-svn: 235463
2015-04-22 02:09:42 +00:00
Benjamin Kramer
dd0ff85701
Remove empty non-virtual destructors or mark them =default when non-public
...
These add no value but can make a class non-trivially copyable. NFC.
llvm-svn: 234688
2015-04-11 15:32:26 +00:00
Benjamin Kramer
619c4e57ba
Reduce dyn_cast<> to isa<> or cast<> where possible.
...
No functional change intended.
llvm-svn: 234586
2015-04-10 11:24:51 +00:00
Benjamin Kramer
0a446fd56c
Add missing includes. make_unique proliferated everywhere.
...
llvm-svn: 230909
2015-03-01 21:28:53 +00:00
Aaron Ballman
97a59fb464
MSVC 2013 does not ICE on this code in the same fashion that MSVC 2012 did; NFC.
...
llvm-svn: 229422
2015-02-16 19:33:36 +00:00
Zachary Turner
3bd47cee78
Use ADDITIONAL_HEADER_DIRS in all LLVM CMake projects.
...
This allows IDEs to recognize the entire set of header files for
each of the core LLVM projects.
Differential Revision: http://reviews.llvm.org/D7526
Reviewed By: Chris Bieneman
llvm-svn: 228798
2015-02-11 03:28:02 +00:00
Alexander Kornienko
8c0809c7f8
Replace size method call of containers to empty method where appropriate
...
This patch was generated by a clang tidy checker that is being open sourced.
The documentation of that checker is the following:
/// The emptiness of a container should be checked using the empty method
/// instead of the size method. It is not guaranteed that size is a
/// constant-time function, and it is generally more efficient and also shows
/// clearer intent to use empty. Furthermore some containers may implement the
/// empty method but not implement the size method. Using empty whenever
/// possible makes it easier to switch to another container in the future.
Patch by Gábor Horváth!
llvm-svn: 226161
2015-01-15 11:41:30 +00:00
Michael Ilseman
5be22a12c2
Clean up static analyzer warnings.
...
Clang's static analyzer found several potential cases of undefined
behavior, use of un-initialized values, and potentially null pointer
dereferences in tablegen, Support, MC, and ADT. This cleans them up
with specific assertions on the assumptions of the code.
llvm-svn: 224154
2014-12-12 21:48:03 +00:00
Craig Topper
5fcc5abc1f
Use range-based for loops. NFC
...
llvm-svn: 224005
2014-12-11 07:04:54 +00:00
Craig Topper
c3504c4874
Make MultiClass::DefPrototypes own their Records to fix memory leaks.
...
llvm-svn: 223998
2014-12-11 05:25:33 +00:00
Craig Topper
7adf2bf76a
Replace std::map<K, V*> with std::map<K, std::unique_ptr<V>> to handle ownership and deletion of the values.
...
Ideally we would store the MultiClasses by value directly in the maps, but I had some trouble with that before and this at least fixes the leak.
llvm-svn: 223997
2014-12-11 05:25:30 +00:00
Craig Topper
4ca4001d44
Revert r222957 "Replace std::map<K, V*> with std::map<K, V> to handle ownership and deletion of the values."
...
Upon further review I think the MultiClass is being copied into the map instead of being moved due to the copy constructor on the nested Record type. This ultimately got exposed when the vector in DefPrototype vector was changed to hold unique_ptrs in another commit. This caused gcc 4.7 to fail due to the use of the copy constructor on unique_ptr with the error pointing back to one of the insert calls from this commit. Not sure why clang was able to build.
This reverts commit 710cdf729f84b428bf41aa8d32dbdb35fff79fde.
llvm-svn: 222971
2014-11-30 01:20:17 +00:00
Hans Wennborg
854df468fb
Revert r222965 "Make MultiClass::DefPrototypes own their Records to fix memory leaks."
...
The bots started failing with the error below. I suspect this revision was the cause.
FAILED: /home/bb/bin/g++47 -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wno-comment -std=c++11 -ffunction-sections -fdata-sections -O3 -DNDEBUG -Ilib/TableGen -I/home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen -Iinclude -I/home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include -fno-exceptions -fno-rtti -MMD -MT lib/TableGen/CMakeFiles/LLVMTableGen.dir/TGParser.cpp.o -MF "lib/TableGen/CMakeFiles/LLVMTableGen.dir/TGParser.cpp.o.d" -o lib/TableGen/CMakeFiles/LLVMTableGen.dir/TGParser.cpp.o -c /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.cpp
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_tempbuf.h:62:0,
from /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_algo.h:64,
from /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/algorithm:63,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include/llvm/ADT/StringRef.h:13,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGLexer.h:17,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.h:17,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.cpp:14:
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_construct.h: In instantiation of 'void std::_Construct(_T1*, _Args&& ...) [with _T1 = std::unique_ptr<llvm::Record>; _Args = {const std::unique_ptr<llvm::Record, std::default_delete<llvm::Record> >&}]':
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_uninitialized.h:77:3: required from 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<llvm::Record>*, std::vector<std::unique_ptr<llvm::Record> > >; _ForwardIterator = std::unique_ptr<llvm::Record>*; bool _TrivialValueTypes = false]'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_uninitialized.h:119:41: required from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<llvm::Record>*, std::vector<std::unique_ptr<llvm::Record> > >; _ForwardIterator = std::unique_ptr<llvm::Record>*]'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_uninitialized.h:260:63: required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = __gnu_cxx::__normal_iterator<const std::unique_ptr<llvm::Record>*, std::vector<std::unique_ptr<llvm::Record> > >; _ForwardIterator = std::unique_ptr<llvm::Record>*; _Tp = std::unique_ptr<llvm::Record>]'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector.h:310:9: required from 'std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::unique_ptr<llvm::Record>; _Alloc = std::allocator<std::unique_ptr<llvm::Record> >]'
/home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include/llvm/TableGen/Record.h:1664:8: required from 'constexpr std::pair<_T1, _T2>::pair(_U1&&, _U2&&) [with _U1 = std::basic_string<char>&; _U2 = llvm::MultiClass; <template-parameter-2-3> = void; _T1 = std::basic_string<char>; _T2 = llvm::MultiClass]'
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_pair.h:273:72: required from 'constexpr std::pair<typename std::__decay_and_strip<_T1>::__type, typename std::__decay_and_strip<_T2>::__type> std::make_pair(_T1&&, _T2&&) [with _T1 = std::basic_string<char>&; _T2 = llvm::MultiClass; typename std::__decay_and_strip<_T2>::__type = llvm::MultiClass; typename std::__decay_and_strip<_T1>::__type = std::basic_string<char>]'
/home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.cpp:2295:78: required from here
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_construct.h:77:7: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = llvm::Record; _Dp = std::default_delete<llvm::Record>]'
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/memory:86:0,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include/llvm/ADT/STLExtras.h:25,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include/llvm/ADT/ArrayRef.h:14,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/include/llvm/Support/SourceMgr.h:19,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.h:19,
from /home/bb/cmake-llvm-x86_64-linux/llvm-project/llvm/lib/TableGen/TGParser.cpp:14:
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/unique_ptr.h:262:7: error: declared here
ninja: build stopped: subcommand failed.
llvm-svn: 222970
2014-11-30 00:43:50 +00:00
Hans Wennborg
ffbbd53f59
Qualify one more make_unique call.
...
The previous patch had effect, but missed this one. It seems MSVC
gets ADL-confused by the calls where the first argument is a function call?
llvm-svn: 222968
2014-11-30 00:31:49 +00:00
Hans Wennborg
b9a6eaac0c
Speculatively qualify some llvm::make_unique calls trying to please MSVC
...
It was failing with this kind of error:
C:\b\build\slave\CrWinClang\build\src\third_party\llvm\lib\TableGen\TGParser.cpp(1243) : error C2668: 'llvm::make_unique' : ambiguous call to overloaded function
C:\b\build\slave\CrWinClang\build\src\third_party\llvm\include\llvm/ADT/STLExtras.h(408): could be 'std::unique_ptr<llvm::Record,std::default_delete<_Ty>> llvm::make_unique<llvm::Record,std::string,llvm::SMLoc&,llvm::RecordKeeper&,bool>(std::string &&,llvm::SMLoc &,llvm::RecordKeeper &,bool &&)'
with
[
_Ty=llvm::Record
]
C:\b\depot_tools\win_toolchain\vs2013_files\win8sdk\bin\..\..\VC\include\memory(1637): or 'std::unique_ptr<llvm::Record,std::default_delete<_Ty>> std::make_unique<llvm::Record,std::string,llvm::SMLoc&,llvm::RecordKeeper&,bool>(std::string &&,llvm::SMLoc &,llvm::RecordKeeper &,bool &&)' [found using argument-dependent lookup]
with
[
_Ty=llvm::Record
]
while trying to match the argument list '(std::string, llvm::SMLoc, llvm::RecordKeeper, bool)'
llvm-svn: 222967
2014-11-30 00:24:43 +00:00
Craig Topper
a4ea4b0983
Use an unsigned type because there seems to be no reason for it to be signed.
...
llvm-svn: 222966
2014-11-30 00:24:32 +00:00
Craig Topper
66ac49302f
Make MultiClass::DefPrototypes own their Records to fix memory leaks.
...
llvm-svn: 222965
2014-11-30 00:19:28 +00:00
Craig Topper
e9b3495465
Replace std::map<K, V*> with std::map<K, V> to handle ownership and deletion of the values.
...
llvm-svn: 222957
2014-11-29 18:12:59 +00:00
Craig Topper
73e2c0d856
Remove 'else' after 'return'. Fix formatting of a 'switch' statement.
...
llvm-svn: 222955
2014-11-29 16:05:27 +00:00
Craig Topper
cdab2326b8
Make RecordKeeper::addClass/addDef take unique_ptrs instead of creating one internally.
...
llvm-svn: 222948
2014-11-29 05:52:51 +00:00
Craig Topper
8413871a7c
Use unique_ptr to remove some explicit deletes on some error case returns. At least one spot of weird ownership passing that needs some future cleanup.
...
llvm-svn: 222947
2014-11-29 05:31:10 +00:00
Benjamin Kramer
e12a6bac32
Eliminate some deep std::vector copies. NFC.
...
llvm-svn: 218999
2014-10-03 18:33:16 +00:00
Anton Yartsev
3fa65d4ef4
Refactoring: raw pointer -> unique_ptr
...
llvm-svn: 218462
2014-09-25 19:55:58 +00:00