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 << '&'