[llvm] r243824 - -Wdeprecated-clean: Fix cases of violating the rule of 5 in ways that are deprecated in C++11

Yaron Keren yaron.keren at gmail.com
Sat Aug 1 12:23:53 PDT 2015


Hi,

ValID move contructor may be causing a compilation failure:


http://lab.llvm.org:8011/builders/clang-x86-win2008-selfhost/builds/2195/steps/build%20stage%202/logs/stdio

C:\buildbot\slave-config\clang-x86-win2008-selfhost\llvm\lib\AsmParser/LLParser.h(70,5)
:  note: copy constructor is implicitly deleted because 'ValID' has a
user-declared move constructor
    ValID(ValID &&RHS)
    ^

Yaron



2015-08-01 8:10 GMT+03:00 David Blaikie <dblaikie at gmail.com>:

> Author: dblaikie
> Date: Sat Aug  1 00:10:40 2015
> New Revision: 243824
>
> URL: http://llvm.org/viewvc/llvm-project?rev=243824&view=rev
> Log:
> -Wdeprecated-clean: Fix cases of violating the rule of 5 in ways that are
> deprecated in C++11
>
> Modified:
>     llvm/trunk/lib/AsmParser/LLParser.cpp
>     llvm/trunk/lib/AsmParser/LLParser.h
>
> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=243824&r1=243823&r2=243824&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Sat Aug  1 00:10:40 2015
> @@ -13,6 +13,7 @@
>
>  #include "LLParser.h"
>  #include "llvm/ADT/SmallPtrSet.h"
> +#include "llvm/ADT/STLExtras.h"
>  #include "llvm/AsmParser/SlotMapping.h"
>  #include "llvm/IR/AutoUpgrade.h"
>  #include "llvm/IR/CallingConv.h"
> @@ -2441,9 +2442,10 @@ bool LLParser::ParseValID(ValID &ID, Per
>          ParseToken(lltok::rbrace, "expected end of struct constant"))
>        return true;
>
> -    ID.ConstantStructElts = new Constant*[Elts.size()];
> +    ID.ConstantStructElts = make_unique<Constant *[]>(Elts.size());
>      ID.UIntVal = Elts.size();
> -    memcpy(ID.ConstantStructElts, Elts.data(),
> Elts.size()*sizeof(Elts[0]));
> +    memcpy(ID.ConstantStructElts.get(), Elts.data(),
> +           Elts.size() * sizeof(Elts[0]));
>      ID.Kind = ValID::t_ConstantStruct;
>      return false;
>    }
> @@ -2462,8 +2464,9 @@ bool LLParser::ParseValID(ValID &ID, Per
>        return true;
>
>      if (isPackedStruct) {
> -      ID.ConstantStructElts = new Constant*[Elts.size()];
> -      memcpy(ID.ConstantStructElts, Elts.data(),
> Elts.size()*sizeof(Elts[0]));
> +      ID.ConstantStructElts = make_unique<Constant *[]>(Elts.size());
> +      memcpy(ID.ConstantStructElts.get(), Elts.data(),
> +             Elts.size() * sizeof(Elts[0]));
>        ID.UIntVal = Elts.size();
>        ID.Kind = ValID::t_PackedConstantStruct;
>        return false;
> @@ -4067,8 +4070,8 @@ bool LLParser::ConvertValIDToValue(Type
>            return Error(ID.Loc, "element " + Twine(i) +
>                      " of struct initializer doesn't match struct element
> type");
>
> -      V = ConstantStruct::get(ST, makeArrayRef(ID.ConstantStructElts,
> -                                               ID.UIntVal));
> +      V = ConstantStruct::get(
> +          ST, makeArrayRef(ID.ConstantStructElts.get(), ID.UIntVal));
>      } else
>        return Error(ID.Loc, "constant expression type mismatch");
>      return false;
>
> Modified: llvm/trunk/lib/AsmParser/LLParser.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=243824&r1=243823&r2=243824&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/AsmParser/LLParser.h (original)
> +++ llvm/trunk/lib/AsmParser/LLParser.h Sat Aug  1 00:10:40 2015
> @@ -55,22 +55,24 @@ namespace llvm {
>        t_InlineAsm,                // Value in FTy/StrVal/StrVal2/UIntVal.
>        t_ConstantStruct,           // Value in ConstantStructElts.
>        t_PackedConstantStruct      // Value in ConstantStructElts.
> -    } Kind;
> +    } Kind = t_LocalID;
>
>      LLLexer::LocTy Loc;
>      unsigned UIntVal;
>      FunctionType *FTy;
>      std::string StrVal, StrVal2;
>      APSInt APSIntVal;
> -    APFloat APFloatVal;
> +    APFloat APFloatVal{0.0};
>      Constant *ConstantVal;
> -    Constant **ConstantStructElts;
> +    std::unique_ptr<Constant *[]> ConstantStructElts;
>
> -    ValID() : Kind(t_LocalID), APFloatVal(0.0) {}
> -    ~ValID() {
> -      if (Kind == t_ConstantStruct || Kind == t_PackedConstantStruct)
> -        delete [] ConstantStructElts;
> -    }
> +    ValID() = default;
> +    ValID(ValID &&RHS)
> +        : Kind(RHS.Kind), Loc(RHS.Loc), UIntVal(RHS.UIntVal),
> FTy(RHS.FTy),
> +          StrVal(std::move(RHS.StrVal)), StrVal2(std::move(RHS.StrVal2)),
> +          APSIntVal(std::move(RHS.APSIntVal)),
> +          APFloatVal(std::move(RHS.APFloatVal)),
> ConstantVal(RHS.ConstantVal),
> +          ConstantStructElts(std::move(RHS.ConstantStructElts)) {}
>
>      bool operator<(const ValID &RHS) const {
>        if (Kind == t_LocalID || Kind == t_GlobalID)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150801/3303a747/attachment.html>


More information about the llvm-commits mailing list