<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 3, 2015 at 1:17 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dblaikie<br>
Date: Tue Mar 3 15:17:08 2015<br>
New Revision: 231135<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=231135&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=231135&view=rev</a><br>
Log:<br>
Remove the explicit SDNodeIterator::operator= in favor of the implicit default<br>
<br>
There doesn't seem to be any need to assert that iterator assignment is<br>
between iterators over the same node - if you want to reuse an iterator<br>
variable to iterate another node, that's perfectly acceptable. Just<br>
don't mix comparisons between iterators into disjoint sequences, as<br>
usual.<br></blockquote><div><br>Accidentally committed a bunch of unrelated changes (splitting them out, coming soon) so I've reverted this patch in r231136 (& recommitted the relevant portion in r231138)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
llvm/trunk/include/llvm/Analysis/CallGraph.h<br>
llvm/trunk/include/llvm/Analysis/IntervalIterator.h<br>
llvm/trunk/include/llvm/Analysis/RegionIterator.h<br>
llvm/trunk/include/llvm/CodeGen/LiveInterval.h<br>
llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h<br>
llvm/trunk/include/llvm/IR/CFG.h<br>
llvm/trunk/include/llvm/IR/ValueHandle.h<br>
llvm/trunk/include/llvm/MC/MCContext.h<br>
llvm/trunk/include/llvm/Support/CommandLine.h<br>
llvm/trunk/include/llvm/Support/Format.h<br>
llvm/trunk/include/llvm/Support/YAMLParser.h<br>
llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp<br>
llvm/trunk/lib/AsmParser/LLParser.cpp<br>
llvm/trunk/lib/AsmParser/LLParser.h<br>
llvm/trunk/lib/CodeGen/LiveInterval.cpp<br>
llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp<br>
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp<br>
llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp<br>
llvm/trunk/tools/llvm-diff/DiffLog.h<br>
llvm/trunk/unittests/ADT/DenseMapTest.cpp<br>
llvm/trunk/unittests/ADT/ilistTest.cpp<br>
llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/Analysis/CallGraph.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/CallGraph.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Analysis/CallGraph.h (original)<br>
+++ llvm/trunk/include/llvm/Analysis/CallGraph.h Tue Mar 3 15:17:08 2015<br>
@@ -104,6 +104,12 @@ class CallGraph {<br>
<br>
public:<br>
CallGraph(Module &M);<br>
+ // Copyable for syntax's sake, but rely on RVO such that this is never called.<br>
+ // Should really make this type legitimately movable instead, possibly my<br>
+ // making FunctionMap values and the CallsExternalCode member unique_ptrs,<br>
+ // then adding some internal helper objects that can call<br>
+ // "allReferencesDropped" on those elements before their final destruction.<br>
+ CallGraph(const CallGraph&);<br>
~CallGraph();<br>
<br>
void print(raw_ostream &OS) const;<br>
<br>
Modified: llvm/trunk/include/llvm/Analysis/IntervalIterator.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/IntervalIterator.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/IntervalIterator.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Analysis/IntervalIterator.h (original)<br>
+++ llvm/trunk/include/llvm/Analysis/IntervalIterator.h Tue Mar 3 15:17:08 2015<br>
@@ -104,6 +104,8 @@ public:<br>
llvm_unreachable("ProcessInterval should never fail for first interval!");<br>
}<br>
}<br>
+ // Declare but don't define, rely on RVO to optimize this away.<br>
+ IntervalIterator(const IntervalIterator&);<br>
<br>
IntervalIterator(IntervalPartition &IP, bool OwnMemory) : IOwnMem(OwnMemory) {<br>
OrigContainer = &IP;<br>
<br>
Modified: llvm/trunk/include/llvm/Analysis/RegionIterator.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/RegionIterator.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/RegionIterator.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Analysis/RegionIterator.h (original)<br>
+++ llvm/trunk/include/llvm/Analysis/RegionIterator.h Tue Mar 3 15:17:08 2015<br>
@@ -146,6 +146,8 @@ public:<br>
return tmp;<br>
}<br>
<br>
+ RNSuccIterator(const RNSuccIterator&) = default;<br>
+<br>
inline const Self &operator=(const Self &I) {<br>
if (this != &I) {<br>
assert(getNode()->getParent() == I.getNode()->getParent()<br>
@@ -241,6 +243,8 @@ public:<br>
return tmp;<br>
}<br>
<br>
+ RNSuccIterator(const RNSuccIterator&) = default;<br>
+<br>
inline const Self &operator=(const Self &I) {<br>
if (this != &I) {<br>
assert(Node->getParent() == I.Node->getParent()<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Tue Mar 3 15:17:08 2015<br>
@@ -199,7 +199,7 @@ namespace llvm {<br>
// of live ranges of physical registers in computeRegUnitRange.<br>
// After that the set is flushed to the segment vector and deleted.<br>
typedef std::set<Segment> SegmentSet;<br>
- SegmentSet *segmentSet;<br>
+ std::unique_ptr<SegmentSet> segmentSet;<br>
<br>
typedef Segments::iterator iterator;<br>
iterator begin() { return segments.begin(); }<br>
@@ -218,15 +218,13 @@ namespace llvm {<br>
const_vni_iterator vni_end() const { return valnos.end(); }<br>
<br>
/// Constructs a new LiveRange object.<br>
- LiveRange(bool UseSegmentSet = false) : segmentSet(nullptr) {<br>
- if (UseSegmentSet)<br>
- segmentSet = new SegmentSet();<br>
- }<br>
+ LiveRange(bool UseSegmentSet = false)<br>
+ : segmentSet(UseSegmentSet ? llvm::make_unique<SegmentSet>()<br>
+ : nullptr) {}<br>
<br>
/// Constructs a new LiveRange object by copying segments and valnos from<br>
/// another LiveRange.<br>
- LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator)<br>
- : segmentSet(nullptr) {<br>
+ LiveRange(const LiveRange &Other, BumpPtrAllocator &Allocator) {<br>
assert(Other.segmentSet == nullptr &&<br>
"Copying of LiveRanges with active SegmentSets is not supported");<br>
<br>
@@ -240,8 +238,6 @@ namespace llvm {<br>
}<br>
}<br>
<br>
- ~LiveRange() { delete segmentSet; }<br>
-<br>
/// advanceTo - Advance the specified iterator to point to the Segment<br>
/// containing the specified position, or end() if the position is past the<br>
/// end of the range. If no Segment contains this position, but the<br>
@@ -745,8 +741,6 @@ namespace llvm {<br>
#endif<br>
<br>
private:<br>
- LiveInterval& operator=(const LiveInterval& rhs) = delete;<br>
-<br>
/// Appends @p Range to SubRanges list.<br>
void appendSubRange(SubRange *Range) {<br>
Range->Next = SubRanges;<br>
<br>
Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)<br>
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Tue Mar 3 15:17:08 2015<br>
@@ -2063,12 +2063,6 @@ public:<br>
}<br>
bool operator!=(const SDNodeIterator& x) const { return !operator==(x); }<br>
<br>
- const SDNodeIterator &operator=(const SDNodeIterator &I) {<br>
- assert(I.Node == Node && "Cannot assign iterators to two different nodes!");<br>
- Operand = I.Operand;<br>
- return *this;<br>
- }<br>
-<br>
pointer operator*() const {<br>
return Node->getOperand(Operand).getNode();<br>
}<br>
<br>
Modified: llvm/trunk/include/llvm/IR/CFG.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/CFG.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/CFG.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/CFG.h (original)<br>
+++ llvm/trunk/include/llvm/IR/CFG.h Tue Mar 3 15:17:08 2015<br>
@@ -132,11 +132,13 @@ private:<br>
/// \brief Proxy object to allow write access in operator[]<br>
class SuccessorProxy {<br>
Self it;<br>
+ friend class SuccIterator;<br>
+ SuccessorProxy(const SuccessorProxy&) = default;<br>
<br>
public:<br>
explicit SuccessorProxy(const Self &it) : it(it) {}<br>
<br>
- SuccessorProxy &operator=(SuccessorProxy r) {<br>
+ SuccessorProxy &operator=(const SuccessorProxy &r) {<br>
*this = reference(r);<br>
return *this;<br>
}<br>
@@ -165,6 +167,8 @@ public:<br>
idx = 0;<br>
}<br>
<br>
+ SuccIterator(const SuccIterator&) = default;<br>
+<br>
inline const Self &operator=(const Self &I) {<br>
assert(Term == I.Term &&"Cannot assign iterators to two different blocks!");<br>
idx = I.idx;<br>
<br>
Modified: llvm/trunk/include/llvm/IR/ValueHandle.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/ValueHandle.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/ValueHandle.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/ValueHandle.h (original)<br>
+++ llvm/trunk/include/llvm/IR/ValueHandle.h Tue Mar 3 15:17:08 2015<br>
@@ -51,6 +51,7 @@ protected:<br>
Tracking,<br>
Weak<br>
};<br>
+ ValueHandleBase(const ValueHandleBase&) = default;<br>
<br>
private:<br>
PointerIntPair<ValueHandleBase**, 2, HandleBaseKind> PrevPair;<br>
@@ -58,7 +59,6 @@ private:<br>
<br>
Value* V;<br>
<br>
- ValueHandleBase(const ValueHandleBase&) = delete;<br>
public:<br>
explicit ValueHandleBase(HandleBaseKind Kind)<br>
: PrevPair(nullptr, Kind), Next(nullptr), V(nullptr) {}<br>
@@ -144,6 +144,10 @@ public:<br>
WeakVH(Value *P) : ValueHandleBase(Weak, P) {}<br>
WeakVH(const WeakVH &RHS)<br>
: ValueHandleBase(Weak, RHS) {}<br>
+ // Questionable - these are stored in a vector in AssumptionCache (perhaps<br>
+ // other copies too) and need to be copied. When copied, how would they<br>
+ // properly insert into the use list?<br>
+ WeakVH&operator=(const WeakVH &RHS) = default;<br>
<br>
Value *operator=(Value *RHS) {<br>
return ValueHandleBase::operator=(RHS);<br>
@@ -345,7 +349,8 @@ protected:<br>
CallbackVH(const CallbackVH &RHS)<br>
: ValueHandleBase(Callback, RHS) {}<br>
<br>
- virtual ~CallbackVH() {}<br>
+ virtual ~CallbackVH() = default;<br>
+ CallbackVH &operator=(const CallbackVH &) = default;<br>
<br>
void setValPtr(Value *P) {<br>
ValueHandleBase::operator=(P);<br>
<br>
Modified: llvm/trunk/include/llvm/MC/MCContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/MC/MCContext.h (original)<br>
+++ llvm/trunk/include/llvm/MC/MCContext.h Tue Mar 3 15:17:08 2015<br>
@@ -477,7 +477,7 @@ namespace llvm {<br>
/// allocator supports it).<br>
/// @return The allocated memory. Could be NULL.<br>
inline void *operator new(size_t Bytes, llvm::MCContext &C,<br>
- size_t Alignment = 16) throw () {<br>
+ size_t Alignment = 16) LLVM_NOEXCEPT {<br>
return C.Allocate(Bytes, Alignment);<br>
}<br>
/// @brief Placement delete companion to the new above.<br>
@@ -487,7 +487,7 @@ inline void *operator new(size_t Bytes,<br>
/// is called implicitly by the compiler if a placement new expression using<br>
/// the MCContext throws in the object constructor.<br>
inline void operator delete(void *Ptr, llvm::MCContext &C, size_t)<br>
- throw () {<br>
+ LLVM_NOEXCEPT {<br>
C.Deallocate(Ptr);<br>
}<br>
<br>
@@ -511,7 +511,7 @@ inline void operator delete(void *Ptr, l<br>
/// allocator supports it).<br>
/// @return The allocated memory. Could be NULL.<br>
inline void *operator new[](size_t Bytes, llvm::MCContext& C,<br>
- size_t Alignment = 16) throw () {<br>
+ size_t Alignment = 16) LLVM_NOEXCEPT {<br>
return C.Allocate(Bytes, Alignment);<br>
}<br>
<br>
@@ -521,7 +521,7 @@ inline void *operator new[](size_t Bytes<br>
/// invoking it directly; see the new[] operator for more details. This operator<br>
/// is called implicitly by the compiler if a placement new[] expression using<br>
/// the MCContext throws in the object constructor.<br>
-inline void operator delete[](void *Ptr, llvm::MCContext &C) throw () {<br>
+inline void operator delete[](void *Ptr, llvm::MCContext &C) LLVM_NOEXCEPT {<br>
C.Deallocate(Ptr);<br>
}<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/Support/CommandLine.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Support/CommandLine.h (original)<br>
+++ llvm/trunk/include/llvm/Support/CommandLine.h Tue Mar 3 15:17:08 2015<br>
@@ -352,9 +352,13 @@ struct cat {<br>
<br>
// Support value comparison outside the template.<br>
struct GenericOptionValue {<br>
- virtual ~GenericOptionValue() {}<br>
+ virtual ~GenericOptionValue() = default;<br>
virtual bool compare(const GenericOptionValue &V) const = 0;<br>
<br>
+protected:<br>
+ GenericOptionValue() = default;<br>
+ GenericOptionValue(const GenericOptionValue&) = default;<br>
+ GenericOptionValue &operator=(const GenericOptionValue &) = default;<br>
private:<br>
virtual void anchor();<br>
};<br>
@@ -386,6 +390,9 @@ struct OptionValueBase : public GenericO<br>
template <class DataType> class OptionValueCopy : public GenericOptionValue {<br>
DataType Value;<br>
bool Valid;<br>
+protected:<br>
+ OptionValueCopy(const OptionValueCopy&) = default;<br>
+ OptionValueCopy &operator=(const OptionValueCopy&) = default;<br>
<br>
public:<br>
OptionValueCopy() : Valid(false) {}<br>
@@ -417,6 +424,10 @@ public:<br>
template <class DataType><br>
struct OptionValueBase<DataType, false> : OptionValueCopy<DataType> {<br>
typedef DataType WrapperType;<br>
+protected:<br>
+ OptionValueBase() = default;<br>
+ OptionValueBase(const OptionValueBase&) = default;<br>
+ OptionValueBase &operator=(const OptionValueBase&) = default;<br>
};<br>
<br>
// Top-level option class.<br>
@@ -721,6 +732,8 @@ public:<br>
virtual void anchor();<br>
<br>
protected:<br>
+ basic_parser_impl(const basic_parser_impl&) = default;<br>
+<br>
// A helper for basic_parser::printOptionDiff.<br>
void printOptionName(const Option &O, size_t GlobalWidth) const;<br>
};<br>
@@ -729,6 +742,9 @@ protected:<br>
// a typedef for the provided data type.<br>
//<br>
template <class DataType> class basic_parser : public basic_parser_impl {<br>
+protected:<br>
+ // Workaround PR22763<br>
+ basic_parser(const basic_parser& RHS) : basic_parser_impl(RHS) {}<br>
public:<br>
basic_parser(Option &O) : basic_parser_impl(O) {}<br>
typedef DataType parser_data_type;<br>
@@ -738,7 +754,7 @@ public:<br>
//--------------------------------------------------<br>
// parser<bool><br>
//<br>
-template <> class parser<bool> : public basic_parser<bool> {<br>
+template <> class parser<bool> final : public basic_parser<bool> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -765,7 +781,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
<br>
//--------------------------------------------------<br>
// parser<boolOrDefault><br>
-template <> class parser<boolOrDefault> : public basic_parser<boolOrDefault> {<br>
+template <> class parser<boolOrDefault> final : public basic_parser<boolOrDefault> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -791,7 +807,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<int><br>
//<br>
-template <> class parser<int> : public basic_parser<int> {<br>
+template <> class parser<int> final : public basic_parser<int> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -813,7 +829,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<unsigned><br>
//<br>
-template <> class parser<unsigned> : public basic_parser<unsigned> {<br>
+template <> class parser<unsigned> final : public basic_parser<unsigned> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -836,7 +852,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
// parser<unsigned long long><br>
//<br>
template <><br>
-class parser<unsigned long long> : public basic_parser<unsigned long long> {<br>
+class parser<unsigned long long> final : public basic_parser<unsigned long long> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -859,7 +875,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<double><br>
//<br>
-template <> class parser<double> : public basic_parser<double> {<br>
+template <> class parser<double> final : public basic_parser<double> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -881,7 +897,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<float><br>
//<br>
-template <> class parser<float> : public basic_parser<float> {<br>
+template <> class parser<float> final : public basic_parser<float> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -903,7 +919,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<std::string><br>
//<br>
-template <> class parser<std::string> : public basic_parser<std::string> {<br>
+template <> class parser<std::string> final : public basic_parser<std::string> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
@@ -928,7 +944,7 @@ EXTERN_TEMPLATE_INSTANTIATION(class basi<br>
//--------------------------------------------------<br>
// parser<char><br>
//<br>
-template <> class parser<char> : public basic_parser<char> {<br>
+template <> class parser<char> final : public basic_parser<char> {<br>
public:<br>
parser(Option &O) : basic_parser(O) {}<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/Support/Format.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Format.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Format.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Support/Format.h (original)<br>
+++ llvm/trunk/include/llvm/Support/Format.h Tue Mar 3 15:17:08 2015<br>
@@ -38,6 +38,7 @@ class format_object_base {<br>
protected:<br>
const char *Fmt;<br>
~format_object_base() {} // Disallow polymorphic deletion.<br>
+ format_object_base(const format_object_base&) = default;<br>
virtual void home(); // Out of line virtual method.<br>
<br>
/// Call snprintf() for this object, on the given buffer and size.<br>
<br>
Modified: llvm/trunk/include/llvm/Support/YAMLParser.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLParser.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLParser.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Support/YAMLParser.h (original)<br>
+++ llvm/trunk/include/llvm/Support/YAMLParser.h Tue Mar 3 15:17:08 2015<br>
@@ -145,11 +145,11 @@ public:<br>
unsigned int getType() const { return TypeID; }<br>
<br>
void *operator new(size_t Size, BumpPtrAllocator &Alloc,<br>
- size_t Alignment = 16) throw() {<br>
+ size_t Alignment = 16) LLVM_NOEXCEPT {<br>
return Alloc.Allocate(Size, Alignment);<br>
}<br>
<br>
- void operator delete(void *Ptr, BumpPtrAllocator &Alloc, size_t Size) throw() {<br>
+ void operator delete(void *Ptr, BumpPtrAllocator &Alloc, size_t Size) LLVM_NOEXCEPT {<br>
Alloc.Deallocate(Ptr, Size);<br>
}<br>
<br>
@@ -157,7 +157,7 @@ protected:<br>
std::unique_ptr<Document> &Doc;<br>
SMRange SourceRange;<br>
<br>
- void operator delete(void *) throw() {}<br>
+ void operator delete(void *) LLVM_NOEXCEPT {}<br>
<br>
virtual ~Node() {}<br>
<br>
<br>
Modified: llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp (original)<br>
+++ llvm/trunk/lib/Analysis/CFLAliasAnalysis.cpp Tue Mar 3 15:17:08 2015<br>
@@ -151,15 +151,13 @@ struct FunctionInfo {<br>
<br>
struct CFLAliasAnalysis;<br>
<br>
-struct FunctionHandle : public CallbackVH {<br>
+struct FunctionHandle final : public CallbackVH {<br>
FunctionHandle(Function *Fn, CFLAliasAnalysis *CFLAA)<br>
: CallbackVH(Fn), CFLAA(CFLAA) {<br>
assert(Fn != nullptr);<br>
assert(CFLAA != nullptr);<br>
}<br>
<br>
- virtual ~FunctionHandle() {}<br>
-<br>
void deleted() override { removeSelfFromCache(); }<br>
void allUsesReplacedWith(Value *) override { removeSelfFromCache(); }<br>
<br>
<br>
Modified: llvm/trunk/lib/AsmParser/LLParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)<br>
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Tue Mar 3 15:17:08 2015<br>
@@ -2365,9 +2365,9 @@ bool LLParser::ParseValID(ValID &ID, Per<br>
ParseToken(lltok::rbrace, "expected end of struct constant"))<br>
return true;<br>
<br>
- ID.ConstantStructElts = new Constant*[Elts.size()];<br>
+ ID.ConstantStructElts.reset(new Constant*[Elts.size()]);<br>
ID.UIntVal = Elts.size();<br>
- memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));<br>
+ memcpy(ID.ConstantStructElts.get(), Elts.data(), Elts.size()*sizeof(Elts[0]));<br>
ID.Kind = ValID::t_ConstantStruct;<br>
return false;<br>
}<br>
@@ -2386,8 +2386,8 @@ bool LLParser::ParseValID(ValID &ID, Per<br>
return true;<br>
<br>
if (isPackedStruct) {<br>
- ID.ConstantStructElts = new Constant*[Elts.size()];<br>
- memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));<br>
+ ID.ConstantStructElts.reset(new Constant*[Elts.size()]);<br>
+ memcpy(ID.ConstantStructElts.get(), Elts.data(), Elts.size()*sizeof(Elts[0]));<br>
ID.UIntVal = Elts.size();<br>
ID.Kind = ValID::t_PackedConstantStruct;<br>
return false;<br>
@@ -2512,7 +2512,12 @@ bool LLParser::ParseValID(ValID &ID, Per<br>
<br>
if (!F) {<br>
// Make a global variable as a placeholder for this reference.<br>
- GlobalValue *&FwdRef = ForwardRefBlockAddresses[Fn][Label];<br>
+ GlobalValue *&FwdRef =<br>
+ ForwardRefBlockAddresses.insert(std::make_pair(<br>
+ std::move(Fn),<br>
+ std::map<ValID, GlobalValue *>()))<br>
+ .first->second.insert(std::make_pair(std::move(Label), nullptr))<br>
+ .first->second;<br>
if (!FwdRef)<br>
FwdRef = new GlobalVariable(*M, Type::getInt8Ty(Context), false,<br>
GlobalValue::InternalLinkage, nullptr, "");<br>
@@ -3942,8 +3947,8 @@ bool LLParser::ConvertValIDToValue(Type<br>
return Error(ID.Loc, "element " + Twine(i) +<br>
" of struct initializer doesn't match struct element type");<br>
<br>
- V = ConstantStruct::get(ST, makeArrayRef(ID.ConstantStructElts,<br>
- ID.UIntVal));<br>
+ V = ConstantStruct::get(<br>
+ ST, makeArrayRef(ID.ConstantStructElts.get(), ID.UIntVal));<br>
} else<br>
return Error(ID.Loc, "constant expression type mismatch");<br>
return false;<br>
<br>
Modified: llvm/trunk/lib/AsmParser/LLParser.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/AsmParser/LLParser.h (original)<br>
+++ llvm/trunk/lib/AsmParser/LLParser.h Tue Mar 3 15:17:08 2015<br>
@@ -62,13 +62,9 @@ namespace llvm {<br>
APSInt APSIntVal;<br>
APFloat APFloatVal;<br>
Constant *ConstantVal;<br>
- Constant **ConstantStructElts;<br>
+ std::unique_ptr<Constant*[]> ConstantStructElts;<br>
<br>
ValID() : Kind(t_LocalID), APFloatVal(0.0) {}<br>
- ~ValID() {<br>
- if (Kind == t_ConstantStruct || Kind == t_PackedConstantStruct)<br>
- delete [] ConstantStructElts;<br>
- }<br>
<br>
bool operator<(const ValID &RHS) const {<br>
if (Kind == t_LocalID || Kind == t_GlobalID)<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LiveInterval.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveInterval.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LiveInterval.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LiveInterval.cpp Tue Mar 3 15:17:08 2015<br>
@@ -743,7 +743,6 @@ void LiveRange::flushSegmentSet() {<br>
segments.empty() &&<br>
"segment set can be used only initially before switching to the array");<br>
segments.append(segmentSet->begin(), segmentSet->end());<br>
- delete segmentSet;<br>
segmentSet = nullptr;<br>
verify();<br>
}<br>
<br>
Modified: llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/LiveStackAnalysis.cpp Tue Mar 3 15:17:08 2015<br>
@@ -61,8 +61,10 @@ LiveStacks::getOrCreateInterval(int Slot<br>
assert(Slot >= 0 && "Spill slot indice must be >= 0");<br>
SS2IntervalMap::iterator I = S2IMap.find(Slot);<br>
if (I == S2IMap.end()) {<br>
- I = S2IMap.insert(I, std::make_pair(Slot,<br>
- LiveInterval(TargetRegisterInfo::index2StackSlot(Slot), 0.0F)));<br>
+ I = S2IMap.emplace(std::piecewise_construct, std::forward_as_tuple(Slot),<br>
+ std::forward_as_tuple(<br>
+ TargetRegisterInfo::index2StackSlot(Slot), 0.0F))<br>
+ .first;<br>
S2RCMap.insert(std::make_pair(Slot, RC));<br>
} else {<br>
// Use the largest common subclass register class.<br>
<br>
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue Mar 3 15:17:08 2015<br>
@@ -9115,9 +9115,6 @@ struct LoadedSlice {<br>
unsigned Shift = 0, SelectionDAG *DAG = nullptr)<br>
: Inst(Inst), Origin(Origin), Shift(Shift), DAG(DAG) {}<br>
<br>
- LoadedSlice(const LoadedSlice &LS)<br>
- : Inst(LS.Inst), Origin(LS.Origin), Shift(LS.Shift), DAG(LS.DAG) {}<br>
-<br>
/// \brief Get the bits used in a chunk of bits \p BitWidth large.<br>
/// \return Result is \p BitWidth and has used bits set to 1 and<br>
/// not used bits set to 0.<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp Tue Mar 3 15:17:08 2015<br>
@@ -319,7 +319,7 @@ void A57ChainingConstraint::addInterChai<br>
<br>
static bool regJustKilledBefore(const LiveIntervals &LIs, unsigned reg,<br>
const MachineInstr &MI) {<br>
- LiveInterval LI = LIs.getInterval(reg);<br>
+ const LiveInterval &LI = LIs.getInterval(reg);<br>
SlotIndex SI = LIs.getInstructionIndex(&MI);<br>
return LI.expiredAt(SI);<br>
}<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp Tue Mar 3 15:17:08 2015<br>
@@ -548,6 +548,7 @@ public:<br>
}<br>
PhiState(Value *b) : status(Base), base(b) {}<br>
PhiState() : status(Unknown), base(nullptr) {}<br>
+ PhiState &operator=(const PhiState &) = default;<br>
PhiState(const PhiState &other) : status(other.status), base(other.base) {<br>
assert(status != Base || base);<br>
}<br>
<br>
Modified: llvm/trunk/tools/llvm-diff/DiffLog.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DiffLog.h?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-diff/DiffLog.h?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-diff/DiffLog.h (original)<br>
+++ llvm/trunk/tools/llvm-diff/DiffLog.h Tue Mar 3 15:17:08 2015<br>
@@ -40,6 +40,8 @@ namespace llvm {<br>
public:<br>
LogBuilder(Consumer &c, StringRef Format)<br>
: consumer(c), Format(Format) {}<br>
+ // Relying on RVO, not actually copyable.<br>
+ LogBuilder(const LogBuilder&);<br>
<br>
LogBuilder &operator<<(Value *V) {<br>
Arguments.push_back(V);<br>
<br>
Modified: llvm/trunk/unittests/ADT/DenseMapTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/DenseMapTest.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/DenseMapTest.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/ADT/DenseMapTest.cpp (original)<br>
+++ llvm/trunk/unittests/ADT/DenseMapTest.cpp Tue Mar 3 15:17:08 2015<br>
@@ -46,6 +46,7 @@ public:<br>
CtorTester(const CtorTester &Arg) : Value(Arg.Value) {<br>
EXPECT_TRUE(Constructed.insert(this).second);<br>
}<br>
+ CtorTester &operator=(const CtorTester &) = default;<br>
~CtorTester() {<br>
EXPECT_EQ(1u, Constructed.erase(this));<br>
}<br>
<br>
Modified: llvm/trunk/unittests/ADT/ilistTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/ilistTest.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/ilistTest.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/ADT/ilistTest.cpp (original)<br>
+++ llvm/trunk/unittests/ADT/ilistTest.cpp Tue Mar 3 15:17:08 2015<br>
@@ -21,7 +21,9 @@ struct Node : ilist_node<Node> {<br>
int Value;<br>
<br>
Node() {}<br>
- Node(int _Value) : Value(_Value) {}<br>
+ Node(int Value) : Value(Value) {}<br>
+ Node(const Node&) = default;<br>
+ Node(Node &&RHS) : Value(RHS.Value) { RHS.Value = -1; }<br>
~Node() { Value = -1; }<br>
};<br>
<br>
<br>
Modified: llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp?rev=231135&r1=231134&r2=231135&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp?rev=231135&r1=231134&r2=231135&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp (original)<br>
+++ llvm/trunk/utils/TableGen/AsmMatcherEmitter.cpp Tue Mar 3 15:17:08 2015<br>
@@ -441,6 +441,8 @@ struct MatchableInfo {<br>
: AsmVariantID(0), AsmString(Alias->AsmString), TheDef(Alias->TheDef), DefRec(Alias.release()) {<br>
}<br>
<br>
+ MatchableInfo(const MatchableInfo&) = default;<br>
+<br>
~MatchableInfo() {<br>
delete DefRec.dyn_cast<const CodeGenInstAlias*>();<br>
}<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>