diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 176576a..ebe75dd 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -184,6 +184,12 @@
   if (const VisibilityAttr *attr = FD->getAttr<VisibilityAttr>())
     CodeGenModule::setVisibility(GV, attr->getVisibility());
   // FIXME: else handle -fvisibility
+
+  if (const AsmLabelAttr *ALA = FD->getAttr<AsmLabelAttr>()) {
+    // Prefaced with special LLVM marker to indicate that the name
+    // should not be munged.
+    GV->setName("\01" + ALA->getLabel());
+  }
 }
 
 void CodeGenModule::SetFunctionAttributes(const FunctionDecl *FD,
@@ -400,13 +406,8 @@
       // Check if we have used a decl with the same name
       // FIXME: The AST should have some sort of aggregate decls or
       // global symbol map.
-      if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
-        if (!getModule().getFunction(FD->getName()))
-          continue;
-      } else {
-        if (!getModule().getNamedGlobal(cast<VarDecl>(D)->getName()))
-          continue;
-      }
+      if (!GlobalDeclMap.count(D->getName()))
+        continue;
 
       // Emit the definition.
       EmitGlobalDefinition(D);
@@ -620,6 +621,12 @@
   if (const VisibilityAttr *attr = D->getAttr<VisibilityAttr>())
     setVisibility(GV, attr->getVisibility());
   // FIXME: else handle -fvisibility
+
+  if (const AsmLabelAttr *ALA = D->getAttr<AsmLabelAttr>()) {
+    // Prefaced with special LLVM marker to indicate that the name
+    // should not be munged.
+    GV->setName("\01" + ALA->getLabel());
+  }
   
   // Set the llvm linkage type as appropriate.
   if (D->getStorageClass() == VarDecl::Static)
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 19a2c28..b513dde 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -808,6 +808,14 @@
     // Handle attributes prior to checking for duplicates in MergeVarDecl
     ProcessDeclAttributes(NewVD, D);
 
+    // Handle GNU asm-label extension (encoded as an attribute).
+    if (Expr *E = (Expr*) D.getAsmLabel()) {
+      // The parser guarantees this is a string.
+      StringLiteral *SE = cast<StringLiteral>(E);  
+      NewVD->addAttr(new AsmLabelAttr(std::string(SE->getStrData(),
+                                                  SE->getByteLength())));
+    }
+
     // Emit an error if an address space was applied to decl with local storage.
     // This includes arrays of objects with address space qualifiers, but not
     // automatic variables that point to other address spaces.
diff --git a/test/CodeGen/2008-07-31-asm-labels.c b/test/CodeGen/2008-07-31-asm-labels.c
new file mode 100644
index 0000000..1b5e0ca
--- /dev/null
+++ b/test/CodeGen/2008-07-31-asm-labels.c
@@ -0,0 +1,25 @@
+// RUN: clang -emit-llvm -o %t %s &&
+// RUN: grep "@pipe()" %t | count 0 &&
+// RUN: grep '_thisIsNotAPipe' %t | count 3 &&
+// RUN: clang -DUSE_DEF -emit-llvm -o %t %s &&
+// RUN: grep "@pipe()" %t | count 0 &&
+// RUN: grep '_thisIsNotAPipe' %t | count 3
+// <rdr://6116729>
+
+void pipe() asm("_thisIsNotAPipe");
+
+void f0() {
+  pipe();
+}
+
+void pipe(int);
+
+void f1() {
+  pipe(1);
+}
+
+#ifdef USE_DEF
+void pipe(int arg) {
+  int x = 10;
+}
+#endif
