Make the isDerivedFrom matcher more generic.

It now accepts an arbitrary inner matcher but is fully backwards
compatible.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160348 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/unittests/ASTMatchers/ASTMatchersTest.cpp b/unittests/ASTMatchers/ASTMatchersTest.cpp
index 597cf6f..5791932 100644
--- a/unittests/ASTMatchers/ASTMatchersTest.cpp
+++ b/unittests/ASTMatchers/ASTMatchersTest.cpp
@@ -245,7 +245,7 @@
       variable(
           hasName("z_char"),
           hasInitializer(hasType(record(isDerivedFrom("Base1"),
-                                       isDerivedFrom("Base2")))))));
+                                        isDerivedFrom("Base2")))))));
 
   const char *RecursiveTemplateTwoParameters =
       "class Base1 {}; class Base2 {};"
@@ -273,7 +273,17 @@
       variable(
           hasName("z_char"),
           hasInitializer(hasType(record(isDerivedFrom("Base1"),
-                                       isDerivedFrom("Base2")))))));
+                                        isDerivedFrom("Base2")))))));
+  EXPECT_TRUE(matches(
+      "namespace ns { class X {}; class Y : public X {}; }",
+      record(isDerivedFrom("::ns::X"))));
+  EXPECT_TRUE(notMatches(
+      "class X {}; class Y : public X {};",
+      record(isDerivedFrom("::ns::X"))));
+
+  EXPECT_TRUE(matches(
+      "class X {}; class Y : public X {};",
+      record(isDerivedFrom(id("test", record(hasName("X")))))));
 }
 
 TEST(AllOf, AllOverloadsWork) {