| Index: pkg/compiler/lib/src/compiler.dart | 
| diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart | 
| index 4b37788a616c93a2e1671d05a55dca05c3f41390..e6b4f4c92b8bef96248f21eff940140ba9ab560c 100644 | 
| --- a/pkg/compiler/lib/src/compiler.dart | 
| +++ b/pkg/compiler/lib/src/compiler.dart | 
| @@ -1795,6 +1795,18 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter { | 
| uri = currentElement.compilationUnit.script.resourceUri; | 
| assert(invariant(currentElement, () { | 
|  | 
| +        bool sameToken(Token token, Token sought) { | 
| +          if (token == sought) return true; | 
| +          if (token.stringValue == '>>' || | 
| +              token.stringValue == '>>>') { | 
| +            // `>>` and `>>>` are converted to `>` in the parser when needed. | 
| +            return sought.stringValue == '>' && | 
| +                token.charOffset <= sought.charOffset && | 
| +                sought.charOffset < token.charEnd; | 
| +          } | 
| +          return false; | 
| +        } | 
| + | 
| /// Check that [begin] and [end] can be found between [from] and [to]. | 
| validateToken(Token from, Token to) { | 
| if (from == null || to == null) return true; | 
| @@ -1802,10 +1814,10 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter { | 
| bool foundEnd = false; | 
| Token token = from; | 
| while (true) { | 
| -            if (token == begin) { | 
| +            if (sameToken(token, begin)) { | 
| foundBegin = true; | 
| } | 
| -            if (token == end) { | 
| +            if (sameToken(token, end)) { | 
| foundEnd = true; | 
| } | 
| if (foundBegin && foundEnd) { | 
| @@ -1859,7 +1871,7 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter { | 
| } | 
|  | 
| SourceSpan spanFromNode(Node node) { | 
| -    return spanFromTokens(node.getBeginToken(), node.getEndToken()); | 
| +    return spanFromTokens(node.getBeginToken(), node.getPrefixEndToken()); | 
| } | 
|  | 
| SourceSpan spanFromElement(Element element) { | 
|  |