Added transfer function/value track logic for taking the address of a label.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47030 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/RValues.cpp b/Analysis/RValues.cpp
index f4b8a3d..5f361ee 100644
--- a/Analysis/RValues.cpp
+++ b/Analysis/RValues.cpp
@@ -491,14 +491,22 @@
     return nonlval::SymbolVal(SymMgr.getSymbol(D));
 }
 
-void RValue::print() const {
-  print(*llvm::cerr.stream());
+//===----------------------------------------------------------------------===//
+// Utility methods for constructing LValues.
+//===----------------------------------------------------------------------===//
+
+LValue LValue::GetValue(AddrLabelExpr* E) {
+  return lval::GotoLabel(E->getLabel());
 }
 
 //===----------------------------------------------------------------------===//
 // Pretty-Printing.
 //===----------------------------------------------------------------------===//
 
+void RValue::print() const {
+  print(*llvm::cerr.stream());
+}
+
 void RValue::print(std::ostream& Out) const {
   switch (getBaseKind()) {
     case UnknownKind:
@@ -577,6 +585,11 @@
     case lval::SymbolValKind:
       Out << '$' << cast<lval::SymbolVal>(this)->getSymbol();
       break;
+      
+    case lval::GotoLabelKind:
+      Out << "&&"
+          << cast<lval::GotoLabel>(this)->getLabel()->getID()->getName();
+      break;
 
     case lval::DeclValKind:
       Out << '&'