[llvm] r220645 - Revert "[PBQP] Unique-ptrify some PBQP Metadata structures. No functional change." (r220642)

Hans Wennborg hans at chromium.org
Sun Oct 26 13:47:14 PDT 2014


On Sun, Oct 26, 2014 at 1:44 PM, Lang Hames <lhames at gmail.com> wrote:
> Oh:
>
> This diagnostic occurred in the compiler generated function
> 'llvm::PBQP::RegAlloc::NodeMetadata::NodeMetadata(const
> llvm::PBQP::RegAlloc::NodeMetadata &)'
>
> That explains that, though it's less clear why VC thinks a copy constructor
> is needed.
>
> Will have a fix shortly.

Thanks! I think we've run into similar problems before where some
object gets moved but VC is synthesizing a copy constructor instead,
and fails to copy the unique_ptr member.


> On Sun, Oct 26, 2014 at 1:36 PM, Lang Hames <lhames at gmail.com> wrote:
>>
>> That's odd. It's just a unique_ptr to an array - that should be supported.
>> I'm going to try #including memory directly and recommit.
>>
>> - Lang.
>>
>> On Sun, Oct 26, 2014 at 12:50 PM, Hans Wennborg <hans at hanshq.net> wrote:
>>>
>>> Author: hans
>>> Date: Sun Oct 26 14:50:13 2014
>>> New Revision: 220645
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=220645&view=rev
>>> Log:
>>> Revert "[PBQP] Unique-ptrify some PBQP Metadata structures. No functional
>>> change." (r220642)
>>>
>>> It broke the Windows build:
>>>
>>>   [1/19] Building CXX object
>>> lib\CodeGen\CMakeFiles\LLVMCodeGen.dir\RegAllocPBQP.cpp.obj
>>>
>>> C:\bb-win7\ninja-clang-i686-msc17-R\llvm-project\llvm\include\llvm/CodeGen/RegAllocPBQP.h(132)
>>> : error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private
>>> member declared in class 'std::unique_ptr<_Ty>'
>>>
>>>      with
>>>      [
>>>          _Ty=unsigned int []
>>>      ]
>>>      D:\Program Files (x86)\Microsoft Visual Studio
>>> 11.0\VC\include\memory(1600) : see declaration of
>>> 'std::unique_ptr<_Ty>::unique_ptr'
>>>      with
>>>      [
>>>          _Ty=unsigned int []
>>>      ]
>>>      This diagnostic occurred in the compiler generated function
>>> 'llvm::PBQP::RegAlloc::NodeMetadata::NodeMetadata(const
>>> llvm::PBQP::RegAlloc::NodeMetadata &)'
>>>
>>> Modified:
>>>     llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h
>>>
>>> Modified: llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h?rev=220645&r1=220644&r2=220645&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h (original)
>>> +++ llvm/trunk/include/llvm/CodeGen/RegAllocPBQP.h Sun Oct 26 14:50:13
>>> 2014
>>> @@ -62,15 +62,20 @@ public:
>>>      delete[] ColCounts;
>>>    }
>>>
>>> +  ~MatrixMetadata() {
>>> +    delete[] UnsafeRows;
>>> +    delete[] UnsafeCols;
>>> +  }
>>> +
>>>    unsigned getWorstRow() const { return WorstRow; }
>>>    unsigned getWorstCol() const { return WorstCol; }
>>> -  const bool* getUnsafeRows() const { return UnsafeRows.get(); }
>>> -  const bool* getUnsafeCols() const { return UnsafeCols.get(); }
>>> +  const bool* getUnsafeRows() const { return UnsafeRows; }
>>> +  const bool* getUnsafeCols() const { return UnsafeCols; }
>>>
>>>  private:
>>>    unsigned WorstRow, WorstCol;
>>> -  std::unique_ptr<bool[]> UnsafeRows;
>>> -  std::unique_ptr<bool[]> UnsafeCols;
>>> +  bool* UnsafeRows;
>>> +  bool* UnsafeCols;
>>>  };
>>>
>>>  class NodeMetadata {
>>> @@ -83,6 +88,7 @@ public:
>>>                   NotProvablyAllocatable } ReductionState;
>>>
>>>    NodeMetadata() : RS(Unprocessed), DeniedOpts(0),
>>> OptUnsafeEdges(nullptr){}
>>> +  ~NodeMetadata() { delete[] OptUnsafeEdges; }
>>>
>>>    void setVReg(unsigned VReg) { this->VReg = VReg; }
>>>    unsigned getVReg() const { return VReg; }
>>> @@ -94,7 +100,7 @@ public:
>>>
>>>    void setup(const Vector& Costs) {
>>>      NumOpts = Costs.getLength() - 1;
>>> -    OptUnsafeEdges = std::unique_ptr<unsigned[]>(new
>>> unsigned[NumOpts]());
>>> +    OptUnsafeEdges = new unsigned[NumOpts]();
>>>    }
>>>
>>>    ReductionState getReductionState() const { return RS; }
>>> @@ -118,15 +124,15 @@ public:
>>>
>>>    bool isConservativelyAllocatable() const {
>>>      return (DeniedOpts < NumOpts) ||
>>> -      (std::find(&OptUnsafeEdges[0], &OptUnsafeEdges[NumOpts], 0) !=
>>> -       &OptUnsafeEdges[NumOpts]);
>>> +      (std::find(OptUnsafeEdges, OptUnsafeEdges + NumOpts, 0) !=
>>> +       OptUnsafeEdges + NumOpts);
>>>    }
>>>
>>>  private:
>>>    ReductionState RS;
>>>    unsigned NumOpts;
>>>    unsigned DeniedOpts;
>>> -  std::unique_ptr<unsigned[]> OptUnsafeEdges;
>>> +  unsigned* OptUnsafeEdges;
>>>    unsigned VReg;
>>>    OptionToRegMap OptionRegs;
>>>  };
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



More information about the llvm-commits mailing list