Есть ли способ, чтобы clang знал о пользовательском непрозрачном подсчете ссылок?

У меня есть несколько непрозрачных типов, и я реализовал семантику подсчета ссылок, которая имитирует базовую основу. Это работает достаточно хорошо, за исключением того, что Clang предупреждает меня о практически допустимых утечках.

MyTypeRef MyTypeRefCreateWithSomething(…) {
    MyTypeRef value = MyTypeRefCreate(…);
    MyTypeRef adjustedValue = MyTypeRefCreate(…);
    MyTypeRefRelease(value);
    return adjustedValue; // clang says that this might be a leak of `value`… 
     // which is only true if something goes wrong with reference counting.
 }

Я ищу что-то вроде attribute_cf_consumed или простой способ сделать мою собственную версию.

Для справки, вот как я в настоящее время замалчиваю предупреждение. Это работает, но это, по моему мнению, так же плохо, как просто оставить предупреждения. (Я если if утверждение, которое окружает MytypeRelease призыв к free)

void MyTypeRelease(MyTypeRef degree) {
    ((MyMutableTypeRef)degree)->refCount--;
    #ifndef __clang_analyzer__
    if ((degree->refCount <= 0) && !MyTypeIsNull(degree)) {
    #endif /*__clang_analyzer__*/
        free((CTJUMTMutableScaleDegree)degree);
    #ifndef __clang_analyzer__
    }
    #endif /*__clang_analyzer__*/
}

0 ответов

Другие вопросы по тегам