Author: Richard Smith Date: 2021-03-23T16:54:28-07:00 New Revision: 4259301aaf58c13b004d968dfbd20428bf978b32
URL: https://github.com/llvm/llvm-project/commit/4259301aaf58c13b004d968dfbd20428bf978b32 DIFF: https://github.com/llvm/llvm-project/commit/4259301aaf58c13b004d968dfbd20428bf978b32.diff LOG: Support #__private_macro and #__public_macro in local submodule visibility mode. Added: clang/test/Modules/Inputs/lsv-private-macro/mod.map clang/test/Modules/Inputs/lsv-private-macro/other.h clang/test/Modules/Inputs/lsv-private-macro/self.h clang/test/Modules/lsv-private-macro.cpp Modified: clang/lib/Lex/PPDirectives.cpp Removed: ################################################################################ diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 252697b2fd35..a771b7c5d122 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -1045,12 +1045,12 @@ void Preprocessor::HandleDirective(Token &Result) { break; case tok::pp___public_macro: - if (getLangOpts().Modules) + if (getLangOpts().Modules || getLangOpts().ModulesLocalVisibility) return HandleMacroPublicDirective(Result); break; case tok::pp___private_macro: - if (getLangOpts().Modules) + if (getLangOpts().Modules || getLangOpts().ModulesLocalVisibility) return HandleMacroPrivateDirective(); break; } diff --git a/clang/test/Modules/Inputs/lsv-private-macro/mod.map b/clang/test/Modules/Inputs/lsv-private-macro/mod.map new file mode 100644 index 000000000000..62b92fb63e79 --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-private-macro/mod.map @@ -0,0 +1,7 @@ +module self { + header "self.h" +} + +module other { + header "other.h" +} diff --git a/clang/test/Modules/Inputs/lsv-private-macro/other.h b/clang/test/Modules/Inputs/lsv-private-macro/other.h new file mode 100644 index 000000000000..356eccaec27f --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-private-macro/other.h @@ -0,0 +1,7 @@ +#define OTHER_PRIVATE +#__private_macro OTHER_PRIVATE + +#define OTHER_PUBLIC +#__public_macro OTHER_PUBLIC + +#define OTHER_DEFAULT diff --git a/clang/test/Modules/Inputs/lsv-private-macro/self.h b/clang/test/Modules/Inputs/lsv-private-macro/self.h new file mode 100644 index 000000000000..5a361308a10d --- /dev/null +++ b/clang/test/Modules/Inputs/lsv-private-macro/self.h @@ -0,0 +1,7 @@ +#define SELF_PRIVATE +#__private_macro SELF_PRIVATE + +#define SELF_PUBLIC +#__public_macro SELF_PUBLIC + +#define SELF_DEFAULT diff --git a/clang/test/Modules/lsv-private-macro.cpp b/clang/test/Modules/lsv-private-macro.cpp new file mode 100644 index 000000000000..6564558453e3 --- /dev/null +++ b/clang/test/Modules/lsv-private-macro.cpp @@ -0,0 +1,53 @@ +// RUN: rm -rf %t +// +// RUN: %clang_cc1 %s \ +// RUN: -fmodules-local-submodule-visibility \ +// RUN: -fmodule-map-file=%S/Inputs/lsv-private-macro/mod.map \ +// RUN: -I%S/Inputs/lsv-private-macro -fmodule-name=self \ +// RUN: -verify=expected-lsv +// +// RUN: %clang_cc1 %s \ +// RUN: -fmodules -fmodules-cache-path=%t \ +// RUN: -fmodule-map-file=%S/Inputs/lsv-private-macro/mod.map \ +// RUN: -I%S/Inputs/lsv-private-macro -fmodule-name=self \ +// RUN: -verify=expected-nolsv +// +// RUN: %clang_cc1 %s \ +// RUN: -fmodules -fmodules-cache-path=%t \ +// RUN: -fmodules-local-submodule-visibility \ +// RUN: -fmodule-map-file=%S/Inputs/lsv-private-macro/mod.map \ +// RUN: -I%S/Inputs/lsv-private-macro -fmodule-name=self \ +// RUN: -verify=expected-lsv + +#include "self.h" + +// With local submodule visibility enabled, private macros don't leak out of +// their respective submodules, even within the same top-level module. +// expected-lsv-no-diagnostics + +// expected-nolsv-error@+2 {{SELF_PRIVATE defined}} +#ifdef SELF_PRIVATE +#error SELF_PRIVATE defined +#endif + +#ifndef SELF_PUBLIC +#error SELF_PUBLIC not defined +#endif + +#ifndef SELF_DEFAULT +#error SELF_DEFAULT not defined +#endif + +#include "other.h" + +#ifdef OTHER_PRIVATE +#error OTHER_PRIVATE defined +#endif + +#ifndef OTHER_PUBLIC +#error OTHER_PUBLIC not defined +#endif + +#ifndef OTHER_DEFAULT +#error OTHER_DEFAULT not defined +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits