diff options
Diffstat (limited to 'www/analyzer/available_checks.html')
-rw-r--r-- | www/analyzer/available_checks.html | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/www/analyzer/available_checks.html b/www/analyzer/available_checks.html index 6ca3f8490e..c610e2bda7 100644 --- a/www/analyzer/available_checks.html +++ b/www/analyzer/available_checks.html @@ -543,6 +543,119 @@ void test() { <colgroup><col class="namedescr"><col class="example"></colgroup> <thead><tr><td>Name, Description</td><td>Example</td></tr></thead> +<tr><td><a id="cplusplus.UninitializedObject"><div class="namedescr expandable"><span class="name"> +cplusplus.UninitializedObject</span><span class="lang"> +(C++)</span><div class="descr"> +This checker reports uninitialized fields in objects created after a constructor +call. It doesn't only find direct uninitialized fields, but rather makes a deep +inspection of the object, analyzing all of it's fields subfields. <br> +The checker regards inherited fields as direct fields, so one will recieve +warnings for uninitialized inherited data members as well. <br> +<br> +It has several options: +<ul> + <li> + "<code>Pedantic</code>" (boolean). If its not set or is set to false, the + checker won't emit warnings for objects that don't have at least one + initialized field. This may be set with <br> + <code>-analyzer-config cplusplus.UninitializedObject:Pedantic=true</code>. + </li> + <li> + "<code>NotesAsWarnings</code>" (boolean). If set to true, the checker will + emit a warning for each uninitalized field, as opposed to emitting one + warning per constructor call, and listing the uninitialized fields that + belongs to it in notes. Defaults to false. <br> + <code>-analyzer-config cplusplus.UninitializedObject:NotesAsWarnings=true</code>. + </li> + <li> + "<code>CheckPointeeInitialization</code>" (boolean). If set to false, the + checker will not analyze the pointee of pointer/reference fields, and will + only check whether the object itself is initialized. Defaults to false. <br> + <code>-analyzer-config cplusplus.UninitializedObject:CheckPointeeInitialization=true</code>. + </li> + <li> + "<code>IgnoreRecordsWithField</code>" (string). If supplied, the checker + will not analyze structures that have a field with a name or type name that + matches the given pattern. Defaults to <code>""</code>. + + <code>-analyzer-config cplusplus.UninitializedObject:IgnoreRecordsWithField="[Tt]ag|[Kk]ind"</code>. + </li> +</ul></div></div></a></td> +<td><div class="exampleContainer expandable"> +<div class="example"><pre> +// With Pedantic and CheckPointeeInitialization set to true + +struct A { + struct B { + int x; // note: uninitialized field 'this->b.x' + // note: uninitialized field 'this->bptr->x' + int y; // note: uninitialized field 'this->b.y' + // note: uninitialized field 'this->bptr->y' + }; + int *iptr; // note: uninitialized pointer 'this->iptr' + B b; + B *bptr; + char *cptr; // note: uninitialized pointee 'this->cptr' + + A (B *bptr, char *cptr) : bptr(bptr), cptr(cptr) {} +}; + +void f() { + A::B b; + char c; + A a(&b, &c); // warning: 6 uninitialized fields + // after the constructor call +} +</pre></div><div class="separator"></div> +<div class="example"><pre> +// With Pedantic set to false and +// CheckPointeeInitialization set to true +// (every field is uninitialized) + +struct A { + struct B { + int x; + int y; + }; + int *iptr; + B b; + B *bptr; + char *cptr; + + A (B *bptr, char *cptr) : bptr(bptr), cptr(cptr) {} +}; + +void f() { + A::B b; + char c; + A a(&b, &c); // no warning +} +</pre></div><div class="separator"></div> +<div class="example"><pre> +// With Pedantic and CheckPointeeInitialization set to false +// (pointees are regarded as initialized) + +struct A { + struct B { + int x; // note: uninitialized field 'this->b.x' + int y; // note: uninitialized field 'this->b.y' + }; + int *iptr; // note: uninitialized pointer 'this->iptr' + B b; + B *bptr; + char *cptr; + + A (B *bptr, char *cptr) : bptr(bptr), cptr(cptr) {} +}; + +void f() { + A::B b; + char c; + A a(&b, &c); // warning: 3 uninitialized fields + // after the constructor call +} +</pre></div></div></td></tr> + <tbody> <tr><td><a id="optin.cplusplus.VirtualCall"><div class="namedescr expandable"><span class="name"> |