Yes, I’m working on a fix.

Can you use regular expressions or globs in FileCheck matching?   It means if 
you ever add a test that makes an expression above this test in the file, you 
have to go renumber everything.  That's kind of annoying even if the numbering 
was still working, and you aren’t testing the expression results numbering here 
anyway…

Jim


> On Mar 20, 2020, at 1:44 PM, Davidino Italiano via lldb-commits 
> <lldb-commits@lists.llvm.org> wrote:
> 
> 
> 
>> On Mar 20, 2020, at 1:43 PM, Davide Italiano via lldb-commits 
>> <lldb-commits@lists.llvm.org> wrote:
>> 
>> 
>> Author: Davide Italiano
>> Date: 2020-03-20T13:43:08-07:00
>> New Revision: 6385c2ab8ff8304eafa822012c40934690bde124
>> 
>> URL: 
>> https://github.com/llvm/llvm-project/commit/6385c2ab8ff8304eafa822012c40934690bde124
>> DIFF: 
>> https://github.com/llvm/llvm-project/commit/6385c2ab8ff8304eafa822012c40934690bde124.diff
>> 
>> LOG: [AppleObjCRuntimeV2] Force lazily allocated class names to be resolved.
>> 
>> Fixes a couple of tests on new versions of the Obj-C runtime.
>> 
>> Added: 
>> 
>> 
>> Modified: 
>>   
>> lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>>   lldb/test/Shell/ExecControl/StopHook/stop-hook.test
>> 
>> Removed: 
>> 
>> 
>> 
>> ################################################################################
>> diff  --git 
>> a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>>  
>> b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>> index 9fea9a217dce..4a07c792eebb 100644
>> --- 
>> a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>> +++ 
>> b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
>> @@ -1175,6 +1175,28 @@ AppleObjCRuntimeV2::GetClassDescriptorFromISA(ObjCISA 
>> isa) {
>>  return class_descriptor_sp;
>> }
>> 
>> +static std::pair<bool, ConstString> ObjCGetClassNameRaw(
>> +                                      AppleObjCRuntime::ObjCISA isa,
>> +                                      Process *process) {
>> +  StreamString expr_string;
>> +  std::string input = std::to_string(isa);
>> +  expr_string.Printf("(const char *)objc_debug_class_getNameRaw(%s)",
>> +                     input.c_str());
>> +
>> +  ValueObjectSP result_sp;
>> +  EvaluateExpressionOptions eval_options;
>> +  eval_options.SetLanguage(lldb::eLanguageTypeObjC);
>> +  eval_options.SetResultIsInternal(true);
>> +  eval_options.SetGenerateDebugInfo(true);
>> +  eval_options.SetTimeout(process->GetUtilityExpressionTimeout());
>> +  auto eval_result = process->GetTarget().EvaluateExpression(
>> +      expr_string.GetData(),
>> +      
>> process->GetThreadList().GetSelectedThread()->GetSelectedFrame().get(),
>> +      result_sp, eval_options);
>> +  ConstString type_name(result_sp->GetSummaryAsCString());
>> +  return std::make_pair(eval_result == eExpressionCompleted, type_name);
>> +}
>> +
>> ObjCLanguageRuntime::ClassDescriptorSP
>> AppleObjCRuntimeV2::GetClassDescriptor(ValueObject &valobj) {
>>  ClassDescriptorSP objc_class_sp;
>> @@ -1210,7 +1232,10 @@ AppleObjCRuntimeV2::GetClassDescriptor(ValueObject 
>> &valobj) {
>>    return objc_class_sp;
>> 
>>  objc_class_sp = GetClassDescriptorFromISA(isa);
>> -  if (isa && !objc_class_sp) {
>> +
>> +  if (objc_class_sp)
>> +    return objc_class_sp;
>> +  else {
>>    Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS |
>>                                      LIBLLDB_LOG_TYPES));
>>    LLDB_LOGF(log,
>> @@ -1219,6 +1244,13 @@ AppleObjCRuntimeV2::GetClassDescriptor(ValueObject 
>> &valobj) {
>>              "not in class descriptor cache 0x%" PRIx64,
>>              isa_pointer, isa);
>>  }
>> +
>> +  ClassDescriptorSP descriptor_sp(new ClassDescriptorV2(*this, isa, 
>> nullptr));
>> +  auto resolved = ObjCGetClassNameRaw(isa, process);
>> +  if (resolved.first == true) {
>> +    AddClass(isa, descriptor_sp, resolved.second.AsCString());
>> +    objc_class_sp = descriptor_sp;
>> +  }
>>  return objc_class_sp;
>> }
>> 
>> 
>> diff  --git a/lldb/test/Shell/ExecControl/StopHook/stop-hook.test 
>> b/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
>> index a06de6634ea1..7e5b37b63854 100644
>> --- a/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
>> +++ b/lldb/test/Shell/ExecControl/StopHook/stop-hook.test
>> @@ -51,7 +51,7 @@ run
>> thread step-over
>> # Stepping inside of the stop hook range
>> # CHECK: (lldb) thread step-over
>> -# CHECK-NEXT: (void *) $1 = 0x
>> +# CHECK-NEXT: (void *) $2 = 0x
>> # CHECK: ->{{.*}} // We should stop here after stepping.
> 
> This is an unfortunate side effect of SetResultInternal not working in the 
> expression parser.
> Jim Ingham is fixing this, to the best of my knowledge.
> 
> —
> Davide
> _______________________________________________
> lldb-commits mailing list
> lldb-commits@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to