Add r168519 back, but with a fix to also merge the used flag in variables.

llvm-svn: 168564
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 629fccc..6a9065e 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2388,6 +2388,10 @@
   if (Old->isPure())
     New->setPure();
 
+  // Merge "used" flag.
+  if (Old->isUsed(false))
+    New->setUsed();
+
   // Merge attributes from the parameters.  These can mismatch with K&R
   // declarations.
   if (New->getNumParams() == Old->getNumParams())
@@ -2613,6 +2617,10 @@
       New->getDeclContext() == Old->getDeclContext())
     New->setStorageClass(Old->getStorageClass());
 
+  // Merge "used" flag.
+  if (Old->isUsed(false))
+    New->setUsed();
+
   // Keep a chain of previous declarations.
   New->setPreviousDeclaration(Old);