Backend support for top-level Clang epxressions

This patch adds a new ExecutionPolicy, eExecutionPolicyTopLevel, which
tells the expression parser that the expression should be JITted as top
level code but nothing (except static initializers) should be run.  I
have modified the Clang expression parser to recognize this execution
policy.  On top of the existing patches that support storing IR and
maintaining a map of arbitrary Decls, this is mainly just patching up a
few places in the expression parser.

I intend to submit a patch for review that exposes this functionality
through the "expression" command and through the SB API.  That patch
also includes a testcase for all of this.

<rdar://problem/22864976>

llvm-svn: 264095
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
index ef65d23..8b22d46 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
@@ -1957,25 +1957,29 @@
         log->Printf("Module as passed in to IRForTarget: \n\"%s\"", s.c_str());
     }
 
-    Function* main_function = m_module->getFunction(StringRef(m_func_name.c_str()));
+    Function *const main_function = m_func_name.IsEmpty() ? nullptr : m_module->getFunction(m_func_name.GetStringRef());
 
-    if (!main_function)
+    if (!m_func_name.IsEmpty() && !main_function)
     {
         if (log)
-            log->Printf("Couldn't find \"%s()\" in the module", m_func_name.c_str());
+            log->Printf("Couldn't find \"%s()\" in the module", m_func_name.AsCString());
 
         if (m_error_stream)
-            m_error_stream->Printf("Internal error [IRForTarget]: Couldn't find wrapper '%s' in the module", m_func_name.c_str());
+            m_error_stream->Printf("Internal error [IRForTarget]: Couldn't find wrapper '%s' in the module",
+                                   m_func_name.AsCString());
 
         return false;
     }
 
-    if (!FixFunctionLinkage (*main_function))
+    if (main_function)
     {
-        if (log)
-            log->Printf("Couldn't fix the linkage for the function");
+        if (!FixFunctionLinkage(*main_function))
+        {
+            if (log)
+                log->Printf("Couldn't fix the linkage for the function");
 
-        return false;
+            return false;
+        }
     }
 
     llvm::Type *int8_ty = Type::getInt8Ty(m_module->getContext());
@@ -1994,14 +1998,17 @@
     // Replace $__lldb_expr_result with a persistent variable
     //
 
-    if (!CreateResultVariable(*main_function))
+    if (main_function)
     {
-        if (log)
-            log->Printf("CreateResultVariable() failed");
+        if (!CreateResultVariable(*main_function))
+        {
+            if (log)
+                log->Printf("CreateResultVariable() failed");
 
-        // CreateResultVariable() reports its own errors, so we don't do so here
+            // CreateResultVariable() reports its own errors, so we don't do so here
 
-        return false;
+            return false;
+        }
     }
 
     if (log && log->GetVerbose())
@@ -2125,24 +2132,27 @@
     // Run function-level passes that only make sense on the main function
     //
 
-    if (!ResolveExternals(*main_function))
+    if (main_function)
     {
-        if (log)
-            log->Printf("ResolveExternals() failed");
+        if (!ResolveExternals(*main_function))
+        {
+            if (log)
+                log->Printf("ResolveExternals() failed");
 
-        // ResolveExternals() reports its own errors, so we don't do so here
+            // ResolveExternals() reports its own errors, so we don't do so here
 
-        return false;
-    }
+            return false;
+        }
 
-    if (!ReplaceVariables(*main_function))
-    {
-        if (log)
-            log->Printf("ReplaceVariables() failed");
+        if (!ReplaceVariables(*main_function))
+        {
+            if (log)
+                log->Printf("ReplaceVariables() failed");
 
-        // ReplaceVariables() reports its own errors, so we don't do so here
+            // ReplaceVariables() reports its own errors, so we don't do so here
 
-        return false;
+            return false;
+        }
     }
 
     if (log && log->GetVerbose())