| Index: pkg/compiler/lib/src/ssa/builder.dart
 | 
| diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
 | 
| index ff49942f217fafc05b58505b801a8c4e9734ec5c..04c7eb08c4ddfa4aec47a96ddb39a393285a81dd 100644
 | 
| --- a/pkg/compiler/lib/src/ssa/builder.dart
 | 
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
 | 
| @@ -239,10 +239,10 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|          this.constantSystem = backend.constantSystem,
 | 
|          this.rtiSubstitutions = backend.rtiSubstitutions {
 | 
|      assert(target.isImplementation);
 | 
| -    elementInferenceResults = _resultOf(target);
 | 
| +    elementInferenceResults = _resultOf(target.declaration);
 | 
|      assert(elementInferenceResults != null);
 | 
|      graph.element = target;
 | 
| -    sourceElementStack.add(target);
 | 
| +    sourceElementStack.add(target.declaration);
 | 
|      sourceInformationBuilder =
 | 
|          sourceInformationFactory.createBuilderForContext(target);
 | 
|      graph.sourceInformation =
 | 
| @@ -292,9 +292,11 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|    /// Note: this helper is used selectively. When we know that we are in a
 | 
|    /// context were we don't expect to see a constructor body element, we
 | 
|    /// directly fetch the data from the global inference results.
 | 
| -  GlobalTypeInferenceElementResult _resultOf(MemberElement element) =>
 | 
| -      globalInferenceResults.resultOfMember(
 | 
| -          element is ConstructorBodyElementX ? element.constructor : element);
 | 
| +  GlobalTypeInferenceElementResult _resultOf(MemberElement element) {
 | 
| +    assert(element.isDeclaration);
 | 
| +    return globalInferenceResults.resultOfMember(
 | 
| +        element is ConstructorBodyElementX ? element.constructor : element);
 | 
| +  }
 | 
|  
 | 
|    /// Build the graph for [target].
 | 
|    HGraph build() {
 | 
| @@ -489,7 +491,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|        // A generative constructor body is not seen by global analysis,
 | 
|        // so we should not query for its type.
 | 
|        if (!function.isGenerativeConstructorBody) {
 | 
| -        if (globalInferenceResults.resultOfMember(function).throwsAlways) {
 | 
| +        if (globalInferenceResults.resultOfMember(declaration).throwsAlways) {
 | 
|            isReachable = false;
 | 
|            return false;
 | 
|          }
 | 
| @@ -507,7 +509,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|      bool reductiveHeuristic() {
 | 
|        // The call is on a path which is executed rarely, so inline only if it
 | 
|        // does not make the program larger.
 | 
| -      if (isCalledOnce(function)) {
 | 
| +      if (isCalledOnce(declaration)) {
 | 
|          return InlineWeeder.canBeInlined(functionResolvedAst, null,
 | 
|              enableUserAssertions: options.enableUserAssertions);
 | 
|        }
 | 
| @@ -565,7 +567,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|        // If a method is called only once, and all the methods in the
 | 
|        // inlining stack are called only once as well, we know we will
 | 
|        // save on output size by inlining this method.
 | 
| -      if (isCalledOnce(function)) {
 | 
| +      if (isCalledOnce(declaration)) {
 | 
|          maxInliningNodes = null;
 | 
|        }
 | 
|        bool canInline = InlineWeeder.canBeInlined(
 | 
| @@ -628,6 +630,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|    }
 | 
|  
 | 
|    bool isCalledOnce(MethodElement element) {
 | 
| +    assert(element.isDeclaration);
 | 
|      return allInlinedFunctionsCalledOnce && isFunctionCalledOnce(element);
 | 
|    }
 | 
|  
 | 
| @@ -639,7 +642,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|        SourceInformationBuilder oldSourceInformationBuilder =
 | 
|            sourceInformationBuilder;
 | 
|        sourceInformationBuilder = sourceInformationBuilder.forContext(element);
 | 
| -      sourceElementStack.add(element.declaration);
 | 
| +      sourceElementStack.add(element);
 | 
|        var result = f();
 | 
|        sourceInformationBuilder = oldSourceInformationBuilder;
 | 
|        sourceElementStack.removeLast();
 | 
| @@ -3683,7 +3686,7 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|    @override
 | 
|    void visitTopLevelFunctionInvoke(ast.Send node, MethodElement function,
 | 
|        ast.NodeList arguments, CallStructure callStructure, _) {
 | 
| -    if (backend.isForeign(closedWorld.commonElements, function)) {
 | 
| +    if (closedWorld.commonElements.isForeign(function)) {
 | 
|        handleForeignSend(node, function);
 | 
|      } else {
 | 
|        generateStaticFunctionInvoke(node, function, callStructure);
 | 
| @@ -6478,10 +6481,10 @@ class SsaAstGraphBuilder extends ast.Visitor
 | 
|          stack,
 | 
|          localsHandler,
 | 
|          inTryStatement,
 | 
| -        isCalledOnce(function),
 | 
| +        isCalledOnce(functionResolvedAst.element),
 | 
|          elementInferenceResults);
 | 
|      resolvedAst = functionResolvedAst;
 | 
| -    elementInferenceResults = _resultOf(function);
 | 
| +    elementInferenceResults = _resultOf(functionResolvedAst.element);
 | 
|      inliningStack.add(state);
 | 
|  
 | 
|      // Setting up the state of the (AST) builder is performed even when the
 | 
| 
 |