{% extends "base.html" %} {% block title %} Warning #{{ object.id }} {% endblock %} {% block content %}

Race Warning id: {{ object.id }}

From program

{{object.program}}

Races (grouped by access 1's line number)

{% regroup object.races.all|dictsort:"access1.occurs_at.line_num" by access1 as acc1_groups %} {% regroup object.races.all|dictsort:"access2.occurs_at.line_num" by access2 as acc2_groups %} {# assuming races were just a cross product of a list of acc1 and acc2 #} {% for group in acc1_groups %} {% endfor %} {% for group in acc2_groups %} {% endfor %}
Acc#LvalOccurs atLocks held Access pathLoses lock at
1 {% ifchanged group.grouper.lval %} {{ group.grouper.lval.printed|escape }} {% endifchanged %} {{ group.grouper.occurs_at }} {% ifchanged group.grouper.locks %} [{% for l in group.grouper.locks.all %} {{ l|escape }} {% endfor %}] {% endifchanged %} {% ifchanged group.grouper.accessed_through %} {{ group.grouper.accessed_through }} {% endifchanged %} {% ifchanged group.grouper.accessed_through.empty_ls %} {{ group.grouper.accessed_through.empty_ls }} {% endifchanged %}
2 {% ifchanged group.grouper.lval %} {{ group.grouper.lval.printed|escape }} {% endifchanged %} {{ group.grouper.occurs_at }} {% ifchanged group.grouper.locks %} [{% for l in group.grouper.locks.all %} {{ l|escape }} {% endfor %}] {% endifchanged %} {% ifchanged group.grouper.accessed_through %} {{ group.grouper.accessed_through }} {% endifchanged %} {% ifchanged group.grouper.accessed_through.empty_ls %} {{ group.grouper.accessed_through.empty_ls }} {% endifchanged %}

Labels: {% if labels %} labels is here! {% endif %} {{ labels }} {% for label in labels %} {{ label }} {% endfor %}

{% endblock %}