[lld] r248873 - Remove `explicit` from constructors that take more than one parameter.

Aaron Ballman via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 29 19:20:20 PDT 2015


On Tue, Sep 29, 2015 at 10:06 PM, Rui Ueyama via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: ruiu
> Date: Tue Sep 29 21:06:17 2015
> New Revision: 248873
>
> URL: http://llvm.org/viewvc/llvm-project?rev=248873&view=rev
> Log:
> Remove `explicit` from constructors that take more than one parameter.

Why? This still has effect for braced initialization, for instance.

struct S {
  explicit S(int, float) {}
};

S foo() {
  return { 1, 2 }; // ill-formed because of the explicit constructor
}

int main() {
  S s = foo();
}

~Aaron

>
> Modified:
>     lld/trunk/ELF/InputFiles.h
>     lld/trunk/ELF/Symbols.h
>
> Modified: lld/trunk/ELF/InputFiles.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=248873&r1=248872&r2=248873&view=diff
> ==============================================================================
> --- lld/trunk/ELF/InputFiles.h (original)
> +++ lld/trunk/ELF/InputFiles.h Tue Sep 29 21:06:17 2015
> @@ -41,7 +41,7 @@ public:
>    StringRef getName() const { return MB.getBufferIdentifier(); }
>
>  protected:
> -  explicit InputFile(Kind K, MemoryBufferRef M) : MB(M), FileKind(K) {}
> +  InputFile(Kind K, MemoryBufferRef M) : MB(M), FileKind(K) {}
>    MemoryBufferRef MB;
>
>  private:
> @@ -52,7 +52,7 @@ enum ELFKind { ELF32LEKind, ELF32BEKind,
>
>  class ELFFileBase : public InputFile {
>  public:
> -  explicit ELFFileBase(Kind K, ELFKind EKind, MemoryBufferRef M)
> +  ELFFileBase(Kind K, ELFKind EKind, MemoryBufferRef M)
>        : InputFile(K, M), EKind(EKind) {}
>    static bool classof(const InputFile *F) {
>      Kind K = F->kind();
> @@ -71,7 +71,7 @@ protected:
>  // .o file.
>  class ObjectFileBase : public ELFFileBase {
>  public:
> -  explicit ObjectFileBase(ELFKind EKind, MemoryBufferRef M)
> +  ObjectFileBase(ELFKind EKind, MemoryBufferRef M)
>        : ELFFileBase(ObjectKind, EKind, M) {}
>    static bool classof(const InputFile *F) { return F->kind() == ObjectKind; }
>
> @@ -185,7 +185,7 @@ private:
>  // .so file.
>  class SharedFileBase : public ELFFileBase {
>  public:
> -  explicit SharedFileBase(ELFKind EKind, MemoryBufferRef M)
> +  SharedFileBase(ELFKind EKind, MemoryBufferRef M)
>        : ELFFileBase(SharedKind, EKind, M) {}
>    static bool classof(const InputFile *F) { return F->kind() == SharedKind; }
>  };
>
> Modified: lld/trunk/ELF/Symbols.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.h?rev=248873&r1=248872&r2=248873&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Symbols.h (original)
> +++ lld/trunk/ELF/Symbols.h Tue Sep 29 21:06:17 2015
> @@ -149,7 +149,7 @@ protected:
>    typedef typename Base::Elf_Sym Elf_Sym;
>
>  public:
> -  explicit Defined(Kind K, StringRef N, const Elf_Sym &Sym)
> +  Defined(Kind K, StringRef N, const Elf_Sym &Sym)
>        : ELFSymbolBody<ELFT>(K, N, Sym) {}
>
>    static bool classof(const SymbolBody *S) { return S->isDefined(); }
> @@ -162,7 +162,7 @@ template <class ELFT> class DefinedAbsol
>  public:
>    static Elf_Sym IgnoreUndef;
>
> -  explicit DefinedAbsolute(StringRef N, const Elf_Sym &Sym)
> +  DefinedAbsolute(StringRef N, const Elf_Sym &Sym)
>        : Defined<ELFT>(Base::DefinedAbsoluteKind, N, Sym) {}
>
>    static bool classof(const SymbolBody *S) {
> @@ -180,7 +180,7 @@ template <class ELFT> class DefinedCommo
>  public:
>    typedef typename std::conditional<ELFT::Is64Bits, uint64_t, uint32_t>::type
>        uintX_t;
> -  explicit DefinedCommon(StringRef N, const Elf_Sym &Sym)
> +  DefinedCommon(StringRef N, const Elf_Sym &Sym)
>        : Defined<ELFT>(Base::DefinedCommonKind, N, Sym) {
>      MaxAlignment = Sym.st_value;
>    }
> @@ -203,8 +203,7 @@ template <class ELFT> class DefinedRegul
>    typedef typename Base::Elf_Sym Elf_Sym;
>
>  public:
> -  explicit DefinedRegular(StringRef N, const Elf_Sym &Sym,
> -                          InputSection<ELFT> &Section)
> +  DefinedRegular(StringRef N, const Elf_Sym &Sym, InputSection<ELFT> &Section)
>        : Defined<ELFT>(Base::DefinedRegularKind, N, Sym), Section(Section) {}
>
>    static bool classof(const SymbolBody *S) {
> @@ -219,8 +218,8 @@ template <class ELFT> class DefinedSynth
>
>  public:
>    typedef typename Base::Elf_Sym Elf_Sym;
> -  explicit DefinedSynthetic(StringRef N, const Elf_Sym &Sym,
> -                            OutputSection<ELFT> &Section)
> +  DefinedSynthetic(StringRef N, const Elf_Sym &Sym,
> +                   OutputSection<ELFT> &Section)
>        : Defined<ELFT>(Base::DefinedSyntheticKind, N, Sym), Section(Section) {}
>
>    static bool classof(const SymbolBody *S) {
> @@ -238,7 +237,7 @@ template <class ELFT> class Undefined :
>  public:
>    static Elf_Sym Synthetic;
>
> -  explicit Undefined(StringRef N, const Elf_Sym &Sym)
> +  Undefined(StringRef N, const Elf_Sym &Sym)
>        : ELFSymbolBody<ELFT>(Base::UndefinedKind, N, Sym) {}
>
>    static bool classof(const SymbolBody *S) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list