On 11-06-30 13:01 , Delesley Hutchins wrote:
This bug fixes a failure in annotalysis that is caused when gcc does
not return the correct static type for the callee of a virtual method.
Bootstrapped and passed GCC regression testsuite on x86_64-unknown-linux-gnu.
Okay for branches/annotalysis and google/main?
OK with some minor formatting nits below.
2011-06-30 DeLesley Hutchins<deles...@google.com>
* tree-threadsafe-analyze.c (handle_call_gs): Fixes case where
the virtual
method callee has unknown type.
Blank line after address line.
Watch for line wrapping past 80 columns.
tree objtype = TREE_TYPE (TREE_TYPE (OBJ_TYPE_REF_OBJECT (callee)));
- fdecl = lang_hooks.get_virtual_function_decl (callee, objtype);
+ /* Check to make sure objtype is a valid type.
+ * OBJ_TYPE_REF_OBJECT does not always return the correct
static type of the callee.
+ * For example: Given foo(void* ptr) { ((Foo*)
ptr)->doSomething(); }
+ * objtype will be void, not Foo. Whether or not this
happens depends on the details
+ * of how a particular call is lowered to GIMPLE, and there
is no easy fix that works
+ * in all cases. For now, we simply rely on gcc's type
information; if that information
+ * is not accurate, then the analysis will be less precise.
+ */
Don't use leading '*' in multi-line comments.
s/gcc/GCC/
+ if (TREE_CODE(objtype) == RECORD_TYPE) /* if objtype is an
object type... */
Comments at the end of a line are rarely used. No need to add one in
this case.
+ {
+ fdecl = lang_hooks.get_virtual_function_decl (callee, objtype);
+ }
No need to add braces here.
Thanks. Diego.