Hi Richard,
I believe this broke our modules builds. Last successful one was with r269388 and the current with r269389 fails with:
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/type_traits:69:12:
 error: constructor cannot be redeclared
    struct integral_constant
           ^
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/type_traits:69:12:
 note: previous implicit declaration is here
    struct integral_constant
           ^
/mnt/build/workspace/root-nightly-master-cxxmodules/BUILDTYPE/Release/COMPILER/native/LABEL/sft-fedora-1/clang_build_269398/ROOT/src/core/meta/src/TGenericClassInfo.cxx:18:10:
 fatal error: could not build module 'TCollectionProxyInfo.h'
#include "TCollectionProxyInfo.h"
 ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.

and

/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/new:99:10: 
error: multiple overloads of 'nothrow_t' instantiate to the same signature 
'void ()'
  struct nothrow_t { };
         ^
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/bits/alloc_traits.h:253:8: note: in 
instantiation of function template specialization '__gnu_cxx::new_allocator<std::pair<int, int> 
>::construct<std::pair<int, int>, const std::pair<int, int> &>' requested here
        { __a.construct(__p, std::forward<_Args>(__args)...); }
              ^
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/bits/alloc_traits.h:399:4: note: in instantiation 
of function template specialization 'std::allocator_traits<std::allocator<std::pair<int, int> > 
>::_S_construct<std::pair<int, int>, const std::pair<int, int> &>' requested here
        { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
          ^
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/bits/stl_vector.h:917:21: note: in instantiation 
of function template specialization 'std::allocator_traits<std::allocator<std::pair<int, int> > 
>::construct<std::pair<int, int>, const std::pair<int, int> &>' requested here
            _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
                           ^
/mnt/build/workspace/root-nightly-master-cxxmodules/BUILDTYPE/Release/COMPILER/native/LABEL/sft-fedora-1/clang_build_269398/ROOT/src/core/meta/src/TSchemaRule.cxx:873:21:
 note: in instantiation of member function 'std::vector<std::pair<int, int>, 
std::allocator<std::pair<int, int> > >::push_back' requested here
      fVersionVect->push_back( verpair );
                    ^
/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/new:99:10: 
note: previous implicit declaration is here
  struct nothrow_t { };

Shall I start reducing the issues one by one or we can revert this patch? Vassil On 13/05/16 08:47, Richard Smith via cfe-commits wrote:
Author: rsmith
Date: Fri May 13 01:47:56 2016
New Revision: 269398

URL: http://llvm.org/viewvc/llvm-project?rev=269398&view=rev
Log:
Add support for derived class special members hiding functions brought in from
a base class via a using-declaration. If a class has a using-declaration
declaring either a constructor or an assignment operator, eagerly declare its
special members in case they need to displace a shadow declaration from a
using-declaration.

Modified:
     cfe/trunk/include/clang/AST/DeclCXX.h
     cfe/trunk/include/clang/Sema/Sema.h
     cfe/trunk/lib/AST/ASTImporter.cpp
     cfe/trunk/lib/AST/DeclCXX.cpp
     cfe/trunk/lib/Sema/SemaDeclCXX.cpp
     cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
     cfe/trunk/lib/Serialization/ASTWriter.cpp
     cfe/trunk/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp
     cfe/trunk/test/SemaCUDA/implicit-member-target.cu
     cfe/trunk/test/SemaCXX/constructor-recovery.cpp

Modified: cfe/trunk/include/clang/AST/DeclCXX.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclCXX.h (original)
+++ cfe/trunk/include/clang/AST/DeclCXX.h Fri May 13 01:47:56 2016
@@ -382,6 +382,14 @@ class CXXRecordDecl : public RecordDecl
      /// provided default ctor also doesn't have an in-class initializer.
      unsigned HasUninitializedFields : 1;
+ /// \brief True if there are any member using-declarations that inherit
+    /// constructors from a base class.
+    unsigned HasInheritedConstructor : 1;
+
+    /// \brief True if there are any member using-declarations named
+    /// 'operator='.
+    unsigned HasInheritedAssignment : 1;
+
      /// \brief These flags are \c true if a defaulted corresponding special
      /// member can't be fully analyzed without performing overload resolution.
      /// @{
@@ -1308,6 +1316,18 @@ public:
      return data().HasNonLiteralTypeFieldsOrBases;
    }
+ /// \brief Determine whether this class has a using-declaration that names
+  /// a base class constructor.
+  bool hasInheritedConstructor() const {
+    return data().HasInheritedConstructor;
+  }
+
+  /// \brief Determine whether this class has a using-declaration that names
+  /// a base class assignment operator.
+  bool hasInheritedAssignment() const {
+    return data().HasInheritedAssignment;
+  }
+
    /// \brief Determine whether this class is considered trivially copyable per
    /// (C++11 [class]p6).
    bool isTriviallyCopyable() const;

Modified: cfe/trunk/include/clang/Sema/Sema.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/Sema.h (original)
+++ cfe/trunk/include/clang/Sema/Sema.h Fri May 13 01:47:56 2016
@@ -4540,6 +4540,9 @@ public:
    /// class.
    void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
+ /// \brief Check a completed declaration of an implicit special member.
+  void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
+
    /// \brief Determine whether the given function is an implicitly-deleted
    /// special member function.
    bool isImplicitlyDeleted(FunctionDecl *FD);

Modified: cfe/trunk/lib/AST/ASTImporter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ASTImporter.cpp (original)
+++ cfe/trunk/lib/AST/ASTImporter.cpp Fri May 13 01:47:56 2016
@@ -2115,6 +2115,8 @@ bool ASTNodeImporter::ImportDefinition(R
      ToData.HasUninitializedReferenceMember
        = FromData.HasUninitializedReferenceMember;
      ToData.HasUninitializedFields = FromData.HasUninitializedFields;
+    ToData.HasInheritedConstructor = FromData.HasInheritedConstructor;
+    ToData.HasInheritedAssignment = FromData.HasInheritedAssignment;
      ToData.NeedOverloadResolutionForMoveConstructor
        = FromData.NeedOverloadResolutionForMoveConstructor;
      ToData.NeedOverloadResolutionForMoveAssignment

Modified: cfe/trunk/lib/AST/DeclCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclCXX.cpp (original)
+++ cfe/trunk/lib/AST/DeclCXX.cpp Fri May 13 01:47:56 2016
@@ -53,6 +53,7 @@ CXXRecordDecl::DefinitionData::Definitio
        HasPublicFields(false), HasMutableFields(false), 
HasVariantMembers(false),
        HasOnlyCMembers(true), HasInClassInitializer(false),
        HasUninitializedReferenceMember(false), HasUninitializedFields(false),
+      HasInheritedConstructor(false), HasInheritedAssignment(false),
        NeedOverloadResolutionForMoveConstructor(false),
        NeedOverloadResolutionForMoveAssignment(false),
        NeedOverloadResolutionForDestructor(false),
@@ -955,6 +956,15 @@ void CXXRecordDecl::addedMember(Decl *D)
        data().Conversions.get(Ctx).addDecl(Ctx, Shadow, Shadow->getAccess());
      }
    }
+
+  if (UsingDecl *Using = dyn_cast<UsingDecl>(D)) {
+    if (Using->getDeclName().getNameKind() ==
+        DeclarationName::CXXConstructorName)
+      data().HasInheritedConstructor = true;
+
+    if (Using->getDeclName().getCXXOverloadedOperator() == OO_Equal)
+      data().HasInheritedAssignment = true;
+  }
  }
void CXXRecordDecl::finishedDefaultedOrDeletedMember(CXXMethodDecl *D) {
Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Fri May 13 01:47:56 2016
@@ -6455,20 +6455,28 @@ void Sema::AddImplicitlyDeclaredMembersT
    if (!ClassDecl->hasUserDeclaredConstructor())
      ++ASTContext::NumImplicitDefaultConstructors;
+ // If this class inherited any constructors, declare the default constructor
+  // now in case it displaces one from a base class.
+  if (ClassDecl->needsImplicitDefaultConstructor() &&
+      ClassDecl->hasInheritedConstructor())
+    DeclareImplicitDefaultConstructor(ClassDecl);
+
    if (!ClassDecl->hasUserDeclaredCopyConstructor()) {
      ++ASTContext::NumImplicitCopyConstructors;
// If the properties or semantics of the copy constructor couldn't be
      // determined while the class was being declared, force a declaration
      // of it now.
-    if (ClassDecl->needsOverloadResolutionForCopyConstructor())
+    if (ClassDecl->needsOverloadResolutionForCopyConstructor() ||
+        ClassDecl->hasInheritedConstructor())
        DeclareImplicitCopyConstructor(ClassDecl);
    }
if (getLangOpts().CPlusPlus11 && ClassDecl->needsImplicitMoveConstructor()) {
      ++ASTContext::NumImplicitMoveConstructors;
- if (ClassDecl->needsOverloadResolutionForMoveConstructor())
+    if (ClassDecl->needsOverloadResolutionForMoveConstructor() ||
+        ClassDecl->hasInheritedConstructor())
        DeclareImplicitMoveConstructor(ClassDecl);
    }
@@ -6480,7 +6488,8 @@ void Sema::AddImplicitlyDeclaredMembersT
      // it shows up in the right place in the vtable and that we diagnose
      // problems with the implicit exception specification.
      if (ClassDecl->isDynamicClass() ||
-        ClassDecl->needsOverloadResolutionForCopyAssignment())
+        ClassDecl->needsOverloadResolutionForCopyAssignment() ||
+        ClassDecl->hasInheritedAssignment())
        DeclareImplicitCopyAssignment(ClassDecl);
    }
@@ -6489,7 +6498,8 @@ void Sema::AddImplicitlyDeclaredMembersT // Likewise for the move assignment operator.
      if (ClassDecl->isDynamicClass() ||
-        ClassDecl->needsOverloadResolutionForMoveAssignment())
+        ClassDecl->needsOverloadResolutionForMoveAssignment() ||
+        ClassDecl->hasInheritedAssignment())
        DeclareImplicitMoveAssignment(ClassDecl);
    }
@@ -8898,10 +8908,11 @@ namespace {
  struct DeclaringSpecialMember {
    Sema &S;
    Sema::SpecialMemberDecl D;
+  Sema::ContextRAII SavedContext;
    bool WasAlreadyBeingDeclared;
DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
-    : S(S), D(RD, CSM) {
+    : S(S), D(RD, CSM), SavedContext(S, RD) {
      WasAlreadyBeingDeclared = !S.SpecialMembersBeingDeclared.insert(D).second;
      if (WasAlreadyBeingDeclared)
        // This almost never happens, but if it does, ensure that our cache
@@ -8923,6 +8934,20 @@ struct DeclaringSpecialMember {
  };
  }
+void Sema::CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD) {
+  // Look up any existing declarations, but don't trigger declaration of all
+  // implicit special members with this name.
+  DeclarationName Name = FD->getDeclName();
+  LookupResult R(*this, Name, SourceLocation(), LookupOrdinaryName,
+                 ForRedeclaration);
+  for (auto *D : FD->getParent()->lookup(Name))
+    if (auto *Acceptable = R.getAcceptableDecl(D))
+      R.addDecl(Acceptable);
+  R.resolveKind();
+
+  CheckFunctionDeclaration(S, FD, R, /*IsExplicitSpecialization*/false);
+}
+
  CXXConstructorDecl *Sema::DeclareImplicitDefaultConstructor(
                                                       CXXRecordDecl 
*ClassDecl) {
    // C++ [class.ctor]p5:
@@ -8971,13 +8996,16 @@ CXXConstructorDecl *Sema::DeclareImplici
    // constructors is easy to compute.
    DefaultCon->setTrivial(ClassDecl->hasTrivialDefaultConstructor());
- if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
-    SetDeclDeleted(DefaultCon, ClassLoc);
-
    // Note that we have declared this constructor.
    ++ASTContext::NumImplicitDefaultConstructorsDeclared;
- if (Scope *S = getScopeForContext(ClassDecl))
+  Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, DefaultCon);
+
+  if (ShouldDeleteSpecialMember(DefaultCon, CXXDefaultConstructor))
+    SetDeclDeleted(DefaultCon, ClassLoc);
+
+  if (S)
      PushOnScopeChains(DefaultCon, S, false);
    ClassDecl->addDecl(DefaultCon);
@@ -9433,20 +9461,21 @@ CXXDestructorDecl *Sema::DeclareImplicit
    FunctionProtoType::ExtProtoInfo EPI = getImplicitMethodEPI(*this, 
Destructor);
    Destructor->setType(Context.getFunctionType(Context.VoidTy, None, EPI));
- AddOverriddenMethods(ClassDecl, Destructor);
-
    // We don't need to use SpecialMemberIsTrivial here; triviality for
    // destructors is easy to compute.
    Destructor->setTrivial(ClassDecl->hasTrivialDestructor());
- if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
-    SetDeclDeleted(Destructor, ClassLoc);
-
    // Note that we have declared this destructor.
    ++ASTContext::NumImplicitDestructorsDeclared;
+ Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, Destructor);
+
+  if (ShouldDeleteSpecialMember(Destructor, CXXDestructor))
+    SetDeclDeleted(Destructor, ClassLoc);
+
    // Introduce this destructor into its scope.
-  if (Scope *S = getScopeForContext(ClassDecl))
+  if (S)
      PushOnScopeChains(Destructor, S, false);
    ClassDecl->addDecl(Destructor);
@@ -10147,20 +10176,21 @@ CXXMethodDecl *Sema::DeclareImplicitCopy
                                                 nullptr);
    CopyAssignment->setParams(FromParam);
- AddOverriddenMethods(ClassDecl, CopyAssignment);
-
    CopyAssignment->setTrivial(
      ClassDecl->needsOverloadResolutionForCopyAssignment()
        ? SpecialMemberIsTrivial(CopyAssignment, CXXCopyAssignment)
        : ClassDecl->hasTrivialCopyAssignment());
- if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
-    SetDeclDeleted(CopyAssignment, ClassLoc);
-
    // Note that we have added this copy-assignment operator.
    ++ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
- if (Scope *S = getScopeForContext(ClassDecl))
+  Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, CopyAssignment);
+
+  if (ShouldDeleteSpecialMember(CopyAssignment, CXXCopyAssignment))
+    SetDeclDeleted(CopyAssignment, ClassLoc);
+
+  if (S)
      PushOnScopeChains(CopyAssignment, S, false);
    ClassDecl->addDecl(CopyAssignment);
@@ -10538,22 +10568,23 @@ CXXMethodDecl *Sema::DeclareImplicitMove
                                                 nullptr);
    MoveAssignment->setParams(FromParam);
- AddOverriddenMethods(ClassDecl, MoveAssignment);
-
    MoveAssignment->setTrivial(
      ClassDecl->needsOverloadResolutionForMoveAssignment()
        ? SpecialMemberIsTrivial(MoveAssignment, CXXMoveAssignment)
        : ClassDecl->hasTrivialMoveAssignment());
+ // Note that we have added this copy-assignment operator.
+  ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
+
+  Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, MoveAssignment);
+
    if (ShouldDeleteSpecialMember(MoveAssignment, CXXMoveAssignment)) {
      ClassDecl->setImplicitMoveAssignmentIsDeleted();
      SetDeclDeleted(MoveAssignment, ClassLoc);
    }
- // Note that we have added this copy-assignment operator.
-  ++ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
-
-  if (Scope *S = getScopeForContext(ClassDecl))
+  if (S)
      PushOnScopeChains(MoveAssignment, S, false);
    ClassDecl->addDecl(MoveAssignment);
@@ -10979,13 +11010,16 @@ CXXConstructorDecl *Sema::DeclareImplici
        ? SpecialMemberIsTrivial(CopyConstructor, CXXCopyConstructor)
        : ClassDecl->hasTrivialCopyConstructor());
- if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
-    SetDeclDeleted(CopyConstructor, ClassLoc);
-
    // Note that we have declared this constructor.
    ++ASTContext::NumImplicitCopyConstructorsDeclared;
- if (Scope *S = getScopeForContext(ClassDecl))
+  Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, CopyConstructor);
+
+  if (ShouldDeleteSpecialMember(CopyConstructor, CXXCopyConstructor))
+    SetDeclDeleted(CopyConstructor, ClassLoc);
+
+  if (S)
      PushOnScopeChains(CopyConstructor, S, false);
    ClassDecl->addDecl(CopyConstructor);
@@ -11156,15 +11190,18 @@ CXXConstructorDecl *Sema::DeclareImplici
        ? SpecialMemberIsTrivial(MoveConstructor, CXXMoveConstructor)
        : ClassDecl->hasTrivialMoveConstructor());
+ // Note that we have declared this constructor.
+  ++ASTContext::NumImplicitMoveConstructorsDeclared;
+
+  Scope *S = getScopeForContext(ClassDecl);
+  CheckImplicitSpecialMemberDeclaration(S, MoveConstructor);
+
    if (ShouldDeleteSpecialMember(MoveConstructor, CXXMoveConstructor)) {
      ClassDecl->setImplicitMoveConstructorIsDeleted();
      SetDeclDeleted(MoveConstructor, ClassLoc);
    }
- // Note that we have declared this constructor.
-  ++ASTContext::NumImplicitMoveConstructorsDeclared;
-
-  if (Scope *S = getScopeForContext(ClassDecl))
+  if (S)
      PushOnScopeChains(MoveConstructor, S, false);
    ClassDecl->addDecl(MoveConstructor);
Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Fri May 13 01:47:56 2016
@@ -1466,6 +1466,8 @@ void ASTDeclReader::ReadCXXDefinitionDat
    Data.HasInClassInitializer = Record[Idx++];
    Data.HasUninitializedReferenceMember = Record[Idx++];
    Data.HasUninitializedFields = Record[Idx++];
+  Data.HasInheritedConstructor = Record[Idx++];
+  Data.HasInheritedAssignment = Record[Idx++];
    Data.NeedOverloadResolutionForMoveConstructor = Record[Idx++];
    Data.NeedOverloadResolutionForMoveAssignment = Record[Idx++];
    Data.NeedOverloadResolutionForDestructor = Record[Idx++];
@@ -1593,6 +1595,8 @@ void ASTDeclReader::MergeDefinitionData(
    MATCH_FIELD(HasInClassInitializer)
    MATCH_FIELD(HasUninitializedReferenceMember)
    MATCH_FIELD(HasUninitializedFields)
+  MATCH_FIELD(HasInheritedConstructor)
+  MATCH_FIELD(HasInheritedAssignment)
    MATCH_FIELD(NeedOverloadResolutionForMoveConstructor)
    MATCH_FIELD(NeedOverloadResolutionForMoveAssignment)
    MATCH_FIELD(NeedOverloadResolutionForDestructor)

Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri May 13 01:47:56 2016
@@ -5489,6 +5489,8 @@ void ASTRecordWriter::AddCXXDefinitionDa
    Record->push_back(Data.HasInClassInitializer);
    Record->push_back(Data.HasUninitializedReferenceMember);
    Record->push_back(Data.HasUninitializedFields);
+  Record->push_back(Data.HasInheritedConstructor);
+  Record->push_back(Data.HasInheritedAssignment);
    Record->push_back(Data.NeedOverloadResolutionForMoveConstructor);
    Record->push_back(Data.NeedOverloadResolutionForMoveAssignment);
    Record->push_back(Data.NeedOverloadResolutionForDestructor);

Modified: cfe/trunk/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp 
(original)
+++ cfe/trunk/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p12.cpp Fri May 
13 01:47:56 2016
@@ -1,3 +1,5 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
  // RUN: %clang_cc1 -fsyntax-only -verify %s
// C++03 [namespace.udecl]p12:
@@ -161,3 +163,33 @@ namespace test4 {
      d.bar<int>(3); // expected-error {{'bar' is a protected member}}
    }
  }
+
+namespace test5 {
+  struct Derived;
+  struct Base {
+    void operator=(const Derived&);
+  };
+  struct Derived : Base {
+    // Hidden by implicit derived class operator.
+    using Base::operator=;
+  };
+  void f(Derived d) {
+    d = d;
+  }
+}
+
+#if __cplusplus >= 201103L
+namespace test6 {
+  struct Derived;
+  struct Base {
+    void operator=(Derived&&);
+  };
+  struct Derived : Base {
+    // Hidden by implicit derived class operator.
+    using Base::operator=;
+  };
+  void f(Derived d) {
+    d = Derived();
+  }
+}
+#endif

Modified: cfe/trunk/test/SemaCUDA/implicit-member-target.cu
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCUDA/implicit-member-target.cu?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/test/SemaCUDA/implicit-member-target.cu (original)
+++ cfe/trunk/test/SemaCUDA/implicit-member-target.cu Fri May 13 01:47:56 2016
@@ -60,13 +60,14 @@ struct A3_with_device_ctors {
struct B3_with_implicit_ctors : A3_with_device_ctors {
  };
+// expected-note@-2 2{{call to __device__ function from __host__ function}}
+// expected-note@-3 {{default constructor}}
-// expected-note@-3 {{copy constructor of 'B3_with_implicit_ctors' is implicitly deleted}} void hostfoo3() {
    B3_with_implicit_ctors b;  // this is OK because the inferred default ctor
                               // here is __host__
-  B3_with_implicit_ctors b2 = b; // expected-error {{call to 
implicitly-deleted copy constructor}}
+  B3_with_implicit_ctors b2 = b; // expected-error {{no matching constructor}}
}
Modified: cfe/trunk/test/SemaCXX/constructor-recovery.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constructor-recovery.cpp?rev=269398&r1=269397&r2=269398&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/constructor-recovery.cpp (original)
+++ cfe/trunk/test/SemaCXX/constructor-recovery.cpp Fri May 13 01:47:56 2016
@@ -1,9 +1,9 @@
  // RUN: %clang_cc1 -fsyntax-only -verify %s
-struct C {
+struct C { // expected-note 1+{{candidate}}
    virtual C() = 0; // expected-error{{constructor cannot be declared 
'virtual'}}
  };
void f() {
- C c;
+ C c; // expected-error {{no matching constructor}}
  }


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to