Add experimental support for address space qualified types. Address space
qualifiers use the __attribute__((address_space(id))) syntax.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46691 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index edf3dc4..382f651 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -131,7 +131,8 @@
   llvm::Constant *&Entry = GlobalDeclMap[D];
   if (Entry) return Entry;
   
-  const llvm::Type *Ty = getTypes().ConvertTypeForMem(D->getType());
+  QualType ASTTy = D->getType();
+  const llvm::Type *Ty = getTypes().ConvertTypeForMem(ASTTy);
 
   // Check to see if the global already exists.
   llvm::GlobalVariable *GV = getModule().getGlobalVariable(D->getName(), true);
@@ -140,7 +141,8 @@
   if (GV == 0) {
     return Entry = new llvm::GlobalVariable(Ty, false, 
                                             llvm::GlobalValue::ExternalLinkage,
-                                            0, D->getName(), &getModule());
+                                            0, D->getName(), &getModule(), 0,
+                                            ASTTy.getAddressSpace());
   }
   
   // If the pointer type matches, just return it.
@@ -162,7 +164,8 @@
   // making a new global of the correct type, RAUW, then steal the name.
   llvm::GlobalVariable *NewGV = 
     new llvm::GlobalVariable(Ty, false, llvm::GlobalValue::ExternalLinkage,
-                             0, D->getName(), &getModule());
+                             0, D->getName(), &getModule(), 0,
+                             ASTTy.getAddressSpace());
   NewGV->takeName(GV);
   
   // Replace uses of GV with the globalvalue we will endow with a body.