------- Additional Comments From dnovillo at gcc dot gnu dot org 2005-03-04 18:01 -------
Adding some of the early analysis that went on in private mail. > So is there an __attribute__ that we can use to mark that function to > always return non-NULL, so the compiler knows that path is not possible? > No. There is __attribute__ ((noreturn)), but the compiler has no way of knowing that svn_fs_fs__id_parse is guaranteed to return non-NULL. This is what the compiler sees in the IL: root_id_41 = svn_fs_fs__id_parse (node_id_str_39, D.10885_40, pool_5); if (root_id_41 == 0B) goto <L13>; else goto <L17>; <L13>:; svn_error__locate (...); D.10887_45 = dgettext (...); svn_err__temp_46 = svn_error_create (160004, 0B, D.10887_45); # root_id_257 = PHI <root_id_28(10), root_id_41(8)>; <L17>:; [ ... ] <L19>:; *root_id_p_30 = root_id_257; At L19, it sees two possible values for root_id (root_id_28 and root_id_41). root_id_28 is the uninitialized value. We don't have a "can't return NULL" attribute. Though it would be useful. In this case, you're better off initializing *root_id_p at the start of the function. Diego. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20318