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.

Reply via email to