diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td
index eadf4e7..e45a866 100644
--- a/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2106,9 +2106,14 @@ def err_alias_to_undefined : Error<
 def warn_alias_to_weak_alias : Warning<
   "alias will always resolve to %0 even if weak definition of alias %1 is overridden">,
   InGroup<IgnoredAttributes>;
+
 def warn_alias_with_section : Warning<
-  "alias will not be in section '%0' but in the same section as the aliasee">,
+  "attribute 'section' on alias ignored; an alias is in the same section as its target">,
   InGroup<IgnoredAttributes>;
+
+def note_alias_target_section : Note<"target of alias is in section '%0'">;
+def note_alias_target_no_section : Note<"target of alias has no section specified">;
+
 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 01a2b25..e52068d 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -259,9 +259,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) {
+
+        Diags.Report(SA->getLocation(), diag::warn_alias_with_section);
+        if (!AliaseeSection.empty())
+          Diags.Report(SA->getLocation(), diag::note_alias_target_section)
+              << AliaseeSection;
+        else
+          Diags.Report(SA->getLocation(), diag::note_alias_target_no_section);
+      }
     }
 
     // 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..25b8ab2 100644
--- a/test/Sema/attr-alias-elf.c
+++ b/test/Sema/attr-alias-elf.c
@@ -58,9 +58,13 @@ void test2_foo() __attribute__((weak, alias("test2_bar")));
 void test2_zed() __attribute__((alias("test2_foo"))); // expected-warning {{alias will always resolve to test2_bar even if weak definition of alias test2_foo is overridden}}
 
 void test3_bar() { }
-void test3_foo() __attribute__((section("test"))); // expected-warning {{alias will not be in section 'test' but in the same section as the aliasee}}
+void test3_foo() __attribute__((section("test"))); // expected-warning {{attribute 'section' on alias ignored; an alias is in the same section as its target}}
 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 {{attribute 'section' on alias ignored; an alias is in the same section as its target}}
+void test5_foo() __attribute__((alias("test5_bar")));
