===================================================================
@@ -6079,12 +6079,15 @@ pt_solutions_intersect_1 (struct pt_solu
return true;
/* If either points to unknown global memory and the other points to
- any global memory they alias. */
- if ((pt1->nonlocal
- && (pt2->nonlocal
- || pt2->vars_contains_global))
- || (pt2->nonlocal
- && pt1->vars_contains_global))
+ any global memory they alias. If both points-to sets are based
+ off a restrict qualified pointer ignore any overlaps with NONLOCAL. */
+ if (!(pt1->vars_contains_restrict
+ && pt2->vars_contains_restrict)
+ && ((pt1->nonlocal
+ && (pt2->nonlocal
+ || pt2->vars_contains_global))
+ || (pt2->nonlocal
+ && pt1->vars_contains_global)))
return true;
/* Check the escaped solution if required. */
@@ -6148,18 +6151,7 @@ bool
pt_solutions_same_restrict_base (struct pt_solution *pt1,
struct pt_solution *pt2)
{
- /* If we deal with points-to solutions of two restrict qualified
- pointers solely rely on the pointed-to variable bitmap intersection.
- For two pointers that are based on each other the bitmaps will
- intersect. */
- if (pt1->vars_contains_restrict
- && pt2->vars_contains_restrict)
- {
- gcc_assert (pt1->vars && pt2->vars);
- return bitmap_intersect_p (pt1->vars, pt2->vars);
- }
-
- return true;
+ return pt_solutions_intersect (pt1, pt2);
}