diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index eadf4e7..71d86c6 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2109,6 +2109,9 @@ def warn_alias_to_weak_alias : Warning<
 def warn_alias_with_section : Warning<
   "alias will not be in section '%0' but in the same section as the aliasee">,
   InGroup<IgnoredAttributes>;
+def warn_alias_with_different_section : Warning<
+  "alias will not be in section '%0' but in section '%1'">,
+  InGroup<IgnoredAttributes>;
 def err_duplicate_mangled_name : Error<
   "definition with same mangled name as another definition">;
 def err_cyclic_alias : Error<
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 9c60eb5..70c133f 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -251,9 +251,16 @@ void CodeGenModule::checkAliases() {
 
     if (const SectionAttr *SA = D->getAttr<SectionAttr>()) {
       StringRef AliasSection = SA->getName();
-      if (AliasSection != AliaseeGV->getSection())
-        Diags.Report(SA->getLocation(), diag::warn_alias_with_section)
-            << AliasSection;
+      StringRef AliaseeSection = AliaseeGV->getSection();
+      if (AliasSection != AliaseeSection) {
+        if (!AliaseeSection.empty())
+          Diags.Report(SA->getLocation(),
+                       diag::warn_alias_with_different_section)
+              << AliasSection << AliaseeSection;
+        else
+          Diags.Report(SA->getLocation(), diag::warn_alias_with_section)
+              << AliasSection;
+      }
     }
 
     // We have to handle alias to weak aliases in here. LLVM itself disallows
diff --git a/test/Sema/attr-alias-elf.c b/test/Sema/attr-alias-elf.c
index 04d1392..2683730 100644
--- a/test/Sema/attr-alias-elf.c
+++ b/test/Sema/attr-alias-elf.c
@@ -64,3 +64,7 @@ void test3_foo() __attribute__((alias("test3_bar")));
 __attribute__((section("test"))) void test4_bar() { }
 void test4_foo() __attribute__((section("test")));
 void test4_foo() __attribute__((alias("test4_bar")));
+
+__attribute__((section("testx"))) void test5_bar() { }
+void test5_foo() __attribute__((section("testy"))); // expected-warning {{alias will not be in section 'testy' but in section 'testx'}}
+void test5_foo() __attribute__((alias("test5_bar")));
