/* CWE-775: "Missing Release of File Descriptor or Handle after
Effective Lifetime". */
m.add_cwe (775);
- return warning_meta (rich_loc, m, OPT_Wanalyzer_file_leak,
- "leak of FILE %qE",
- m_arg);
+ if (m_arg)
+ return warning_meta (rich_loc, m, OPT_Wanalyzer_file_leak,
+ "leak of FILE %qE",
+ m_arg);
+ else
+ return warning_meta (rich_loc, m, OPT_Wanalyzer_file_leak,
+ "leak of FILE");
}
label_text describe_state_change (const evdesc::state_change &change)
label_text describe_final_event (const evdesc::final_event &ev) FINAL OVERRIDE
{
if (m_fopen_event.known_p ())
- return ev.formatted_print ("%qE leaks here; was opened at %@",
- ev.m_expr, &m_fopen_event);
+ {
+ if (ev.m_expr)
+ return ev.formatted_print ("%qE leaks here; was opened at %@",
+ ev.m_expr, &m_fopen_event);
+ else
+ return ev.formatted_print ("leaks here; was opened at %@",
+ &m_fopen_event);
+ }
else
- return ev.formatted_print ("%qE leaks here", ev.m_expr);
+ {
+ if (ev.m_expr)
+ return ev.formatted_print ("%qE leaks here", ev.m_expr);
+ else
+ return ev.formatted_print ("leaks here");
+ }
}
private:
--- /dev/null
+char *
+fopen (const char *restrict, const char *restrict);
+
+void
+k2 (void)
+{
+ char *setfiles[1];
+ int i;
+
+ setfiles[i] = fopen ("", ""); /* { dg-warning "use of uninitialized value 'i'" } */
+} /* { dg-warning "leak of FILE" } */