diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 3699ba1..b8458bf 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -5970,6 +5970,42 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePartExport = messagePartExport;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePartExport = const MessageCode("PartExport",
+    analyzerCode: "EXPORT_OF_NON_LIBRARY",
+    message:
+        r"""Can't export this file because it contains a 'part of' declaration.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePartExportContext = messagePartExportContext;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePartExportContext = const MessageCode(
+    "PartExportContext",
+    severity: Severity.context,
+    message: r"""This is the file that can't be exported.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePartInPart = messagePartInPart;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePartInPart = const MessageCode("PartInPart",
+    analyzerCode: "NON_PART_OF_DIRECTIVE_IN_PART",
+    message: r"""A file that's a part of a library can't have parts itself.""",
+    tip: r"""Try moving the 'part' declaration to the containing library.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePartInPartLibraryContext = messagePartInPartLibraryContext;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePartInPartLibraryContext = const MessageCode(
+    "PartInPartLibraryContext",
+    severity: Severity.context,
+    message: r"""This is the containing library.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(Uri uri_)> templatePartOfInLibrary = const Template<
         Message Function(Uri uri_)>(
@@ -6129,6 +6165,14 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codePartOrphan = messagePartOrphan;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messagePartOrphan = const MessageCode("PartOrphan",
+    message: r"""This part doesn't have a containing library.""",
+    tip: r"""Try removing the 'part of' declaration.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(Uri uri_)> templatePartTwice =
     const Template<Message Function(Uri uri_)>(
         messageTemplate: r"""Can't use '#uri' as a part more than once.""",
diff --git a/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart b/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart
new file mode 100644
index 0000000..7fa63c8
--- /dev/null
+++ b/pkg/front_end/lib/src/fasta/ignored_parser_errors.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library fasta.ignored_parser_errors;
+
+import 'fasta_codes.dart' show Code, codeNonPartOfDirectiveInPart;
+
+import 'parser.dart' show optional;
+
+import 'scanner.dart' show Token;
+
+bool isIgnoredParserError(Code<Object> code, Token token) {
+  if (code == codeNonPartOfDirectiveInPart) {
+    // Ignored. This error is handled in the outline phase (part resolution).
+    return optional("part", token);
+  } else {
+    return false;
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 3e8e852..fee5680 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -12,8 +12,6 @@
 
 import '../fasta_codes.dart' show LocatedMessage, Message, noLength, Template;
 
-import 'forest.dart' show Forest;
-
 import '../messages.dart' as messages show getLocationFromUri;
 
 import '../modifier.dart' show Modifier, constMask, covariantMask, finalMask;
@@ -90,6 +88,8 @@
 
 import 'expression_generator_helper.dart' show ExpressionGeneratorHelper;
 
+import 'forest.dart' show Forest;
+
 import 'redirecting_factory_body.dart'
     show
         RedirectingFactoryBody,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index d153f1c..37562af 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -1197,8 +1197,8 @@
   }
 
   @override
-  void includePart(covariant KernelLibraryBuilder part) {
-    super.includePart(part);
+  void includePart(covariant KernelLibraryBuilder part, Set<Uri> usedParts) {
+    super.includePart(part, usedParts);
     nativeMethods.addAll(part.nativeMethods);
     boundlessTypeVariables.addAll(part.boundlessTypeVariables);
   }
diff --git a/pkg/front_end/lib/src/fasta/rewrite_severity.dart b/pkg/front_end/lib/src/fasta/rewrite_severity.dart
index 6ffcfb2..bd79cf0 100644
--- a/pkg/front_end/lib/src/fasta/rewrite_severity.dart
+++ b/pkg/front_end/lib/src/fasta/rewrite_severity.dart
@@ -47,7 +47,6 @@
       case "entry_points.dart":
       case "kernel/body_builder.dart":
       case "source/diet_listener.dart":
-      case "source/source_library_builder.dart":
         return severity;
     }
   } else if (code == msg.codeMissingExplicitTypeArguments) {
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index 5c8d3f8..763fce3 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -33,10 +33,13 @@
 import '../fasta_codes.dart'
     show
         LocatedMessage,
+        Code,
         Message,
         messageExpectedBlockToSkip,
         templateInternalProblemNotFound;
 
+import '../ignored_parser_errors.dart' show isIgnoredParserError;
+
 import '../kernel/kernel_body_builder.dart' show KernelBodyBuilder;
 
 import '../kernel/kernel_formal_parameter_builder.dart'
@@ -918,4 +921,10 @@
     }
     return result;
   }
+
+  @override
+  bool isIgnoredError(Code code, Token token) {
+    return isIgnoredParserError(code, token) ||
+        super.isIgnoredError(code, token);
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index bf89fb5..96e5a23 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -6,16 +6,17 @@
 
 import 'package:kernel/ast.dart' show ProcedureKind;
 
-import '../../scanner/token.dart' show Token;
-
 import '../builder/builder.dart';
 
 import '../builder/metadata_builder.dart' show ExpressionMetadataBuilder;
 
 import '../combinator.dart' show Combinator;
 
+import '../configuration.dart' show Configuration;
+
 import '../fasta_codes.dart'
     show
+        Code,
         LocatedMessage,
         Message,
         messageConstConstructorWithBody,
@@ -36,6 +37,16 @@
         templateOperatorParameterMismatch1,
         templateOperatorParameterMismatch2;
 
+import '../ignored_parser_errors.dart' show isIgnoredParserError;
+
+// TODO(ahe): The outline isn't supposed to import kernel-specific builders.
+import '../kernel/kernel_builder.dart'
+    show
+        KernelFormalParameterBuilder,
+        KernelMixinApplicationBuilder,
+        KernelNamedTypeBuilder,
+        KernelTypeBuilder;
+
 import '../modifier.dart'
     show
         Const,
@@ -72,19 +83,12 @@
 
 import '../quote.dart' show unescapeString;
 
+import '../scanner.dart' show Token;
+
 import 'source_library_builder.dart' show SourceLibraryBuilder;
 
 import 'stack_listener.dart' show NullValue, StackListener;
 
-import '../configuration.dart' show Configuration;
-
-import '../kernel/kernel_builder.dart'
-    show
-        KernelFormalParameterBuilder,
-        KernelMixinApplicationBuilder,
-        KernelNamedTypeBuilder,
-        KernelTypeBuilder;
-
 enum MethodBody {
   Abstract,
   Regular,
@@ -1439,6 +1443,12 @@
         wasHandled: wasHandled, context: context);
   }
 
+  @override
+  bool isIgnoredError(Code code, Token token) {
+    return isIgnoredParserError(code, token) ||
+        super.isIgnoredError(code, token);
+  }
+
   /// Return the documentation comment for the entity that starts at the
   /// given [token], or `null` if there is no preceding documentation comment.
   static String getDocumentationComment(Token token) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 62794ae..7d81a1a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -34,16 +34,19 @@
 
 import '../combinator.dart' show Combinator;
 
-import '../deprecated_problems.dart' show deprecated_inputError;
-
 import '../export.dart' show Export;
 
 import '../fasta_codes.dart'
     show
+        LocatedMessage,
         Message,
         messageConstructorWithWrongName,
         messageExpectedUri,
         messageMemberWithSameNameAsClass,
+        messagePartExport,
+        messagePartExportContext,
+        messagePartInPart,
+        messagePartInPartLibraryContext,
         messagePartOfSelf,
         messagePartOfTwoLibraries,
         messagePartOfTwoLibrariesContext,
@@ -84,6 +87,9 @@
 
   final List<SourceLibraryBuilder<T, R>> parts = <SourceLibraryBuilder<T, R>>[];
 
+  // Can I use library.parts instead? See KernelLibraryBuilder.addPart.
+  final List<int> partOffsets = <int>[];
+
   final List<Import> imports = <Import>[];
 
   final List<Export> exports = <Export>[];
@@ -333,6 +339,7 @@
     newFileUri = resolve(fileUri, uri, charOffset);
     parts.add(loader.read(resolvedUri, charOffset,
         fileUri: newFileUri, accessor: this));
+    partOffsets.add(charOffset);
   }
 
   void addPartOf(
@@ -590,19 +597,36 @@
     implementationBuilders.add([name, declaration, charOffset]);
   }
 
-  void validatePart() {
-    if (parts.isNotEmpty) {
-      deprecated_inputError(fileUri, -1,
-          "A file that's a part of a library can't have parts itself.");
+  void validatePart(SourceLibraryBuilder library, Set<Uri> usedParts) {
+    if (library != null && parts.isNotEmpty) {
+      // If [library] is null, we have already reported a problem that this
+      // part is orphaned.
+      List<LocatedMessage> context = <LocatedMessage>[
+        messagePartInPartLibraryContext.withLocation(library.fileUri, 0, 1),
+      ];
+      for (int offset in partOffsets) {
+        addProblem(messagePartInPart, offset, noLength, fileUri,
+            context: context);
+      }
+      for (SourceLibraryBuilder part in parts) {
+        // Mark this part as used so we don't report it as orphaned.
+        usedParts.add(part.uri);
+      }
     }
+    parts.clear();
     if (exporters.isNotEmpty) {
-      Export export = exporters.first;
-      deprecated_inputError(
-          export.fileUri, export.charOffset, "A part can't be exported.");
+      List<LocatedMessage> context = <LocatedMessage>[
+        messagePartExportContext.withLocation(fileUri, 0, 1),
+      ];
+      for (Export export in exporters) {
+        export.exporter.addProblem(
+            messagePartExport, export.charOffset, "export".length, null,
+            context: context);
+      }
     }
   }
 
-  void includeParts() {
+  void includeParts(Set<Uri> usedParts) {
     Set<Uri> seenParts = new Set<Uri>();
     for (SourceLibraryBuilder<T, R> part in parts) {
       if (part == this) {
@@ -617,7 +641,8 @@
                     this.fileUri, -1, noLength)
               ]);
         } else {
-          includePart(part);
+          usedParts.add(part.uri);
+          includePart(part, usedParts);
         }
       } else {
         addProblem(templatePartTwice.withArguments(part.fileUri), -1, noLength,
@@ -626,7 +651,7 @@
     }
   }
 
-  void includePart(SourceLibraryBuilder<T, R> part) {
+  void includePart(SourceLibraryBuilder<T, R> part, Set<Uri> usedParts) {
     if (part.partOfUri != null) {
       if (uriIsValid(part.partOfUri) && part.partOfUri != uri) {
         // This is a warning, but the part is still included.
@@ -666,6 +691,7 @@
             noLength, fileUri);
       }
     }
+    part.validatePart(this, usedParts);
     part.forEach((String name, Declaration declaration) {
       if (declaration.next != null) {
         // TODO(ahe): This shouldn't be necessary as setters have been added to
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index fa1b8fb..d318a5a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -55,6 +55,7 @@
         Message,
         SummaryTemplate,
         Template,
+        messagePartOrphan,
         noLength,
         templateAmbiguousSupertypes,
         templateCantReadFile,
@@ -85,7 +86,7 @@
 
 import '../parser.dart' show Parser, lengthForToken, offsetForToken;
 
-import '../problems.dart' show internalProblem, unhandled;
+import '../problems.dart' show internalProblem, unexpected, unhandled;
 
 import '../scanner.dart' show ErrorToken, ScannerResult, Token, scan;
 
@@ -300,18 +301,29 @@
 
   void resolveParts() {
     List<Uri> parts = <Uri>[];
+    List<SourceLibraryBuilder> libraries = <SourceLibraryBuilder>[];
     builders.forEach((Uri uri, LibraryBuilder library) {
       if (library.loader == this) {
-        SourceLibraryBuilder sourceLibrary = library;
-        if (sourceLibrary.isPart) {
-          sourceLibrary.validatePart();
+        if (library.isPart) {
           parts.add(uri);
         } else {
-          sourceLibrary.includeParts();
+          libraries.add(library);
         }
       }
     });
-    parts.forEach(builders.remove);
+    Set<Uri> usedParts = new Set<Uri>();
+    for (SourceLibraryBuilder library in libraries) {
+      library.includeParts(usedParts);
+    }
+    for (Uri uri in parts) {
+      if (usedParts.contains(uri)) {
+        builders.remove(uri);
+      } else {
+        SourceLibraryBuilder part = builders[uri];
+        part.addProblem(messagePartOrphan, 0, 1, part.fileUri);
+        part.validatePart(null, null);
+      }
+    }
     ticker.logMs("Resolved parts");
 
     builders.forEach((Uri uri, LibraryBuilder library) {
@@ -657,8 +669,7 @@
     Set<Library> libraries = new Set<Library>();
     List<Library> workList = <Library>[];
     builders.forEach((Uri uri, LibraryBuilder library) {
-      if (!library.isPart &&
-          !library.isPatch &&
+      if (!library.isPatch &&
           (library.loader == this || library.fileUri.scheme == "dart")) {
         if (libraries.add(library.target)) {
           workList.add(library.target);
@@ -824,6 +835,9 @@
         result[i++] = ShadowClass.getClassInferenceInfo(cls).builder
           ..prepareTopLevelInference();
       }
+      if (i != result.length) {
+        unexpected("${result.length}", "$i", -1, null);
+      }
       orderedClasses = result;
     }
     typeInferenceEngine.isTypeInferencePrepared = true;
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index 07a16b0..e388982 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -9,6 +9,7 @@
 
 import '../fasta_codes.dart'
     show
+        Code,
         LocatedMessage,
         Message,
         codeCatchSyntaxExtraParameters,
@@ -355,19 +356,25 @@
   @override
   void handleRecoverableError(
       Message message, Token startToken, Token endToken) {
-    if (message.code == codeNativeClauseShouldBeAnnotation) {
-      // TODO(danrubel): Ignore this error until we deprecate `native` support.
-      return;
-    }
-    if (message.code == codeCatchSyntaxExtraParameters) {
-      // Ignored. This error is handled by the BodyBuilder.
-      return;
-    }
     debugEvent("Error: ${message.message}");
+    if (isIgnoredError(message.code, startToken)) return;
     addProblem(message, offsetForToken(startToken),
         lengthOfSpan(startToken, endToken));
   }
 
+  bool isIgnoredError(Code code, Token token) {
+    if (code == codeNativeClauseShouldBeAnnotation) {
+      // TODO(danrubel): Ignore this error until we deprecate `native`
+      // support.
+      return true;
+    } else if (code == codeCatchSyntaxExtraParameters) {
+      // Ignored. This error is handled by the BodyBuilder.
+      return true;
+    } else {
+      return false;
+    }
+  }
+
   @override
   void handleUnescapeError(
       Message message, Token token, int stringOffset, int length) {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index ca30a13..6eba5be 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -275,6 +275,7 @@
 PartOfLibraryNameMismatch/example: Fail
 PartOfUriMismatch/example: Fail
 PartOfUseUri/example: Fail
+PartOrphan/analyzerCode: Fail # Analyzer can't handle this situation
 PatchClassTypeVariablesMismatch/analyzerCode: Fail
 PatchClassTypeVariablesMismatch/example: Fail
 PatchDeclarationMismatch/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index ed49e2b..94e2ef2 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1920,7 +1920,13 @@
   tip: "Try removing all but one of the part-of directives."
   analyzerCode: MULTIPLE_PART_OF_DIRECTIVES
   script:
-    - "part of l; part of m;"
+    main.dart: |
+      part "part.dart";
+      main() {}
+    other.dart: ""
+    part.dart: |
+      part of "other.dart";
+      part of "main.dart";
 
 PartTwice:
   template: "Can't use '#uri' as a part more than once."
@@ -1999,8 +2005,60 @@
   tip: "Try removing the 'part of' declaration, or using '#uri' as a part."
   analyzerCode: IMPORT_OF_NON_LIBRARY
   script:
-    part.dart: "part of mainlib;"
-    main.dart: "library mainlib; import 'part.dart';"
+    main.dart: |
+      import "part.dart";
+      import "lib.dart";
+      main() {}
+
+    part.dart: |
+      part of "lib.dart";
+
+    lib.dart: |
+      part "part.dart";
+
+PartInPart:
+  template: "A file that's a part of a library can't have parts itself."
+  tip: "Try moving the 'part' declaration to the containing library."
+  analyzerCode: NON_PART_OF_DIRECTIVE_IN_PART
+  script:
+    main.dart: |
+      part "part.dart";
+      main() {}
+
+    part.dart: |
+      part of "main.dart";
+      part "part_part.dart";
+
+    part_part.dart: |
+      part of "part.dart";
+
+PartInPartLibraryContext:
+  template: "This is the containing library."
+  severity: CONTEXT
+
+PartOrphan:
+  template: "This part doesn't have a containing library."
+  tip: "Try removing the 'part of' declaration."
+  script: "part of none; main() {}"
+
+PartExport:
+  template: "Can't export this file because it contains a 'part of' declaration."
+  analyzerCode: EXPORT_OF_NON_LIBRARY
+  script:
+    main.dart: |
+      export "part.dart";
+      import "lib.dart";
+      main() {}
+
+    part.dart: |
+      part of "lib.dart";
+
+    lib.dart: |
+      part "part.dart";
+
+PartExportContext:
+  template: "This is the file that can't be exported."
+  severity: CONTEXT
 
 SupertypeIsFunction:
   template: "Can't use a function type as supertype."
