From a5b43c1b5e330b5b69137191cc58fdea66f87f7e Mon Sep 17 00:00:00 2001 From: qinghaonan Date: Thu, 5 Dec 2024 16:48:51 +0800 Subject: [PATCH] removed error for using access declarations in C++11 and above, and instead outputs a warning. --- clang/lib/Basic/Diagnostic.cpp | 12 ++++++++++++ clang/lib/Frontend/FrontendAction.cpp | 9 ++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index 7a54d27ef9d8..76273b032d4c 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -355,13 +355,22 @@ void DiagnosticsEngine::setSeverity(diag::kind Diag, diag::Severity Map, SourceLocation L) { assert(Diag < diag::DIAG_UPPER_LIMIT && "Can only map builtin diagnostics"); +#ifdef BUILD_FOR_OPENEULER + if (!(DiagOpts->GccCompatible)) { +#endif assert((Diags->isBuiltinWarningOrExtension(Diag) || (Map == diag::Severity::Fatal || Map == diag::Severity::Error)) && "Cannot map errors into warnings!"); +#ifdef BUILD_FOR_OPENEULER + } +#endif assert((L.isInvalid() || SourceMgr) && "No SourceMgr for valid location"); // Don't allow a mapping to a warning override an error/fatal mapping. bool WasUpgradedFromWarning = false; +#ifdef BUILD_FOR_OPENEULER + if (!(DiagOpts->GccCompatible)) { +#endif if (Map == diag::Severity::Warning) { DiagnosticMapping &Info = GetCurDiagState()->getOrAddMapping(Diag); if (Info.getSeverity() == diag::Severity::Error || @@ -370,6 +379,9 @@ void DiagnosticsEngine::setSeverity(diag::kind Diag, diag::Severity Map, WasUpgradedFromWarning = true; } } +#ifdef BUILD_FOR_OPENEULER + } +#endif DiagnosticMapping Mapping = makeUserMapping(Map, L); Mapping.setUpgradedFromWarning(WasUpgradedFromWarning); diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp index 0bd4b01ff79d..6f684dc3c019 100644 --- a/clang/lib/Frontend/FrontendAction.cpp +++ b/clang/lib/Frontend/FrontendAction.cpp @@ -31,6 +31,7 @@ #include "clang/Parse/ParseAST.h" #include "clang/Sema/HLSLExternalSemaSource.h" #include "clang/Sema/MultiplexExternalSemaSource.h" +#include "clang/Sema/SemaDiagnostic.h" #include "clang/Serialization/ASTDeserializationListener.h" #include "clang/Serialization/ASTReader.h" #include "clang/Serialization/GlobalModuleIndex.h" @@ -1169,7 +1170,13 @@ void ASTFrontendAction::ExecuteAction() { if (!CI.hasSema()) CI.createSema(getTranslationUnitKind(), CompletionConsumer); - +#ifdef BUILD_FOR_OPENEULER + if (CI.getLangOpts().GccCompatible) { + // error: ISO C++11 does not allow access declarations + CI.getSema().Diags.setSeverity(diag::err_access_decl, + diag::Severity::Warning, {}); + } +#endif ParseAST(CI.getSema(), CI.getFrontendOpts().ShowStats, CI.getFrontendOpts().SkipFunctionBodies); } -- Gitee