Hi

is this funny function AppleObjCRuntimeV1::CreateObjectChecker actually used ?

First of all the snprintf is wrapped in an assert (!?). If the code gets compiled with -DNDEBUG, the function would pretty much do nothing.

Second, I guess, that this is some C-code that gets compiled on the fly, It seems to do nothing. I guess the code has a chance of crashing, if the parameter is not really an object. The debugger could notice that and figure out, that it's not an object. But guessing is not knowing... :)

Ciao
  Nat!


```
struct BufStruct {
    char contents[2048];
};

UtilityFunction *
AppleObjCRuntimeV1::CreateObjectChecker(const char *name)
{
    std::unique_ptr<BufStruct> buf(new BufStruct);

    assert(snprintf(&buf->contents[0], sizeof(buf->contents),
"struct __objc_class \n" "{ \n" " struct __objc_class *isa; \n" " struct __objc_class *super_class; \n" " const char *name; \n" " // rest of struct elided because unused \n" "}; \n" " \n" "struct __objc_object \n" "{ \n" " struct __objc_class *isa; \n" "}; \n" " \n" "extern \"C\" void \n" "%s(void *$__lldb_arg_obj, void *$__lldb_arg_selector) \n" "{ \n" " struct __objc_object *obj = (struct __objc_object*)$__lldb_arg_obj; \n" " (int)strlen(obj->isa->name); \n" "} \n",
                    name) < (int)sizeof(buf->contents));

    Error error;
return GetTargetRef().GetUtilityFunctionForLanguage(buf->contents, eLanguageTypeObjC, name, error);
}
```

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

Reply via email to