The "desired result type" code in the expression
parser has hitherto been an implementation waiting
for a use.  I have now tied the '-o' option for
the expression command -- which indicates that the
result is an Objective-C object and needs to be
printed -- to the ExpressionParser, which
communicates the desired type to Clang.

Now, if the result of an expression is determined
by an Objective-C method call for which there is
no type information, that result is implicitly
cast to id if and only if the -o option is passed
to the expression command.  (Otherwise if there
is no explicit cast Clang will issue an error.
This behavior is identical to what happened before
r146756.)

Also added a testcase for -o enabled and disabled.


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@147099 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBFrame.cpp b/source/API/SBFrame.cpp
index a541047..3a3c582 100644
--- a/source/API/SBFrame.cpp
+++ b/source/API/SBFrame.cpp
@@ -756,12 +756,14 @@
         Host::SetCrashDescriptionWithFormat ("SBFrame::EvaluateExpression (expr = \"%s\", fetch_dynamic_value = %u) %s",
                                              expr, fetch_dynamic_value, frame_description.GetString().c_str());
 
+        const bool coerce_to_id = false;
         const bool unwind_on_error = true;
         const bool keep_in_memory = false;
 
         exe_results = m_opaque_sp->GetThread().GetProcess().GetTarget().EvaluateExpression(expr, 
                                                                                            m_opaque_sp.get(),
                                                                                            eExecutionPolicyOnlyWhenNeeded,
+                                                                                           coerce_to_id,
                                                                                            unwind_on_error, 
                                                                                            keep_in_memory, 
                                                                                            fetch_dynamic_value, 
diff --git a/source/API/SBValue.cpp b/source/API/SBValue.cpp
index 654336d..1ed3fea 100644
--- a/source/API/SBValue.cpp
+++ b/source/API/SBValue.cpp
@@ -388,6 +388,7 @@
         m_opaque_sp->GetUpdatePoint().GetTargetSP()->EvaluateExpression (expression,
                                                                          m_opaque_sp->GetExecutionContextScope()->CalculateStackFrame(),
                                                                          eExecutionPolicyOnlyWhenNeeded,
+                                                                         false, // coerce to id
                                                                          true, // unwind on error
                                                                          true, // keep in memory
                                                                          eNoDynamicValues,