Mercurial > hg > CbC > CbC_llvm
view clang/test/Analysis/retain-release-cpp-classes.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// RUN: %clang_analyze_cc1 -analyzer-checker=core,osx -analyzer-output=text -verify %s // expected-no-diagnostics typedef void *CFTypeRef; typedef struct _CFURLCacheRef *CFURLCacheRef; CFTypeRef CustomCFRetain(CFTypeRef); void invalidate(void *); struct S1 { CFTypeRef s; CFTypeRef returnFieldAtPlus0() { return s; } }; struct S2 { S1 *s1; }; void foo(S1 *s1) { invalidate(s1); S2 s2; s2.s1 = s1; CustomCFRetain(s1->returnFieldAtPlus0()); // Definitely no leak end-of-path note here. The retained pointer // is still accessible through s1 and s2. ((void) 0); // no-warning // FIXME: Ideally we need to warn after this invalidate(). The per-function // retain-release contract is violated: the programmer should release // the symbol after it was retained, within the same function. invalidate(&s2); }