diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 0943feae950eb8ae4f27e2e6c6d4788ee30994b6..a7d2116f1a705f98573eb0895f2b3b43a5533efe 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -243,7 +243,10 @@ def err_expected_property_name : Error<"expected property name">; def err_unexpected_at : Error<"unexpected '@' in program">; def err_atimport : Error< -"use of '@import' when modules are disabled">; + "use of '@import' when modules are disabled">; +def err_atimport_cxx : Error< + "use of '@import' when C++ modules are disabled, consider using fmodules " + "and fcxx-modules">; def err_invalid_reference_qualifier_application : Error< "'%0' qualifier may not be applied to a reference">; diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index 81761bf8d2d89535399793a61527db34d750e5c5..68768e1835544d899441e6cd867b5c8ba0aabec7 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -83,7 +83,10 @@ Parser::DeclGroupPtrTy Parser::ParseObjCAtDirectives() { case tok::objc_import: if (getLangOpts().Modules || getLangOpts().DebuggerSupport) return ParseModuleImport(AtLoc); - Diag(AtLoc, diag::err_atimport); + if (getLangOpts().CPlusPlus) + Diag(AtLoc, diag::err_atimport_cxx); + else + Diag(AtLoc, diag::err_atimport); SkipUntil(tok::semi); return Actions.ConvertDeclToDeclGroup(nullptr); default: diff --git a/test/Modules/check-syntax.mm b/test/Modules/check-syntax.mm new file mode 100644 index 0000000000000000000000000000000000000000..ebb4bd3faf3fd3eb56f49b9045411222a6032024 --- /dev/null +++ b/test/Modules/check-syntax.mm @@ -0,0 +1,5 @@ +// RUN: not %clang -fmodules -fno-cxx-modules -fsyntax-only %s 2>&1 | FileCheck %s +// rdar://19399671 + +// CHECK: use of '@import' when C++ modules are disabled +@import Foundation;