diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index d18b9d3..cb93aee 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -11156,6 +11156,12 @@ NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
       DC = DC->getParent();
     }
 
+    if (Previous.empty()) {
+      DC = CurContext;
+      while (DC->isRecord())
+        DC = DC->getParent();
+    }
+
     DCScope = getScopeForDeclContext(S, DC);
     
     // C++ [class.friend]p6:
diff --git a/test/SemaCXX/linkage2.cpp b/test/SemaCXX/linkage2.cpp
index ddf4064..1355bb0 100644
--- a/test/SemaCXX/linkage2.cpp
+++ b/test/SemaCXX/linkage2.cpp
@@ -152,3 +152,13 @@ namespace test15 {
   const int a = 5; // expected-note {{previous definition is here}}
   static const int a; // expected-error {{redefinition of 'a'}}
 }
+
+namespace test16 {
+  extern "C" {
+    class Foo {
+      friend void bar();
+    };
+    void bar() {
+    }
+  }
+}
