From: Douglas Gregor Date: Tue, 3 Jan 2012 18:24:14 +0000 (+0000) Subject: Under -fmodules, accept #public and #private X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=94ad28b31433058445a27db722f60402ee820bea;p=clang Under -fmodules, accept #public and #private to make a macro public (the default for headers) or private, respectively. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147455 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def index 103e0c93d3..277ed84ed6 100644 --- a/include/clang/Basic/TokenKinds.def +++ b/include/clang/Basic/TokenKinds.def @@ -90,8 +90,8 @@ PPKEYWORD(assert) PPKEYWORD(unassert) // Clang extensions -PPKEYWORD(__export_macro__) -PPKEYWORD(__private_macro__) +PPKEYWORD(public) +PPKEYWORD(private) //===----------------------------------------------------------------------===// // Language keywords. diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index e8f9d6be08..53d5f400b3 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -1197,7 +1197,7 @@ private: void HandleDigitDirective(Token &Tok); void HandleUserDiagnosticDirective(Token &Tok, bool isWarning); void HandleIdentSCCSDirective(Token &Tok); - void HandleMacroExportDirective(Token &Tok); + void HandleMacroPublicDirective(Token &Tok); void HandleMacroPrivateDirective(Token &Tok); // File inclusion. diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp index 690a1f5a84..4368ff712c 100644 --- a/lib/Basic/IdentifierTable.cpp +++ b/lib/Basic/IdentifierTable.cpp @@ -216,18 +216,17 @@ tok::PPKeywordKind IdentifierInfo::getPPKeywordID() const { CASE( 6, 'i', 'n', ifndef); CASE( 6, 'i', 'p', import); CASE( 6, 'p', 'a', pragma); - + CASE( 6, 'p', 'b', public); + CASE( 7, 'd', 'f', defined); CASE( 7, 'i', 'c', include); + CASE( 7, 'p', 'i', private); CASE( 7, 'w', 'r', warning); CASE( 8, 'u', 'a', unassert); CASE(12, 'i', 'c', include_next); CASE(16, '_', 'i', __include_macros); - CASE(16, '_', 'e', __export_macro__); - - CASE(17, '_', 'p', __private_macro__); #undef CASE #undef HASH } diff --git a/lib/Lex/PPDirectives.cpp b/lib/Lex/PPDirectives.cpp index 2dfae872e2..04d92b8a29 100644 --- a/lib/Lex/PPDirectives.cpp +++ b/lib/Lex/PPDirectives.cpp @@ -682,10 +682,15 @@ TryAgain: //isExtension = true; // FIXME: implement #unassert break; - case tok::pp___export_macro__: - return HandleMacroExportDirective(Result); - case tok::pp___private_macro__: - return HandleMacroPrivateDirective(Result); + case tok::pp_public: + if (getLangOptions().Modules) + return HandleMacroPublicDirective(Result); + break; + + case tok::pp_private: + if (getLangOptions().Modules) + return HandleMacroPrivateDirective(Result); + break; } break; } @@ -1038,8 +1043,8 @@ void Preprocessor::HandleIdentSCCSDirective(Token &Tok) { } } -/// \brief Handle a #__export_macro__ directive. -void Preprocessor::HandleMacroExportDirective(Token &Tok) { +/// \brief Handle a #public directive. +void Preprocessor::HandleMacroPublicDirective(Token &Tok) { Token MacroNameTok; ReadMacroName(MacroNameTok, 2); @@ -1047,8 +1052,8 @@ void Preprocessor::HandleMacroExportDirective(Token &Tok) { if (MacroNameTok.is(tok::eod)) return; - // Check to see if this is the last token on the #__export_macro__ line. - CheckEndOfDirective("__export_macro__"); + // Check to see if this is the last token on the #public line. + CheckEndOfDirective("public"); // Okay, we finally have a valid identifier to undef. MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo()); @@ -1069,7 +1074,7 @@ void Preprocessor::HandleMacroExportDirective(Token &Tok) { MI->setChangedAfterLoad(); } -/// \brief Handle a #__private_macro__ directive. +/// \brief Handle a #private directive. void Preprocessor::HandleMacroPrivateDirective(Token &Tok) { Token MacroNameTok; ReadMacroName(MacroNameTok, 2); @@ -1078,8 +1083,8 @@ void Preprocessor::HandleMacroPrivateDirective(Token &Tok) { if (MacroNameTok.is(tok::eod)) return; - // Check to see if this is the last token on the #__private_macro__ line. - CheckEndOfDirective("__private_macro__"); + // Check to see if this is the last token on the #private line. + CheckEndOfDirective("private"); // Okay, we finally have a valid identifier to undef. MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo()); diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index a2994a3312..3ecdae2978 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -67,7 +67,11 @@ Parser::DeclGroupPtrTy Parser::ParseObjCAtDirectives() { SingleDecl = ParseObjCPropertyDynamic(AtLoc); break; case tok::objc_import: - return ParseModuleImport(AtLoc); + if (getLang().Modules) + return ParseModuleImport(AtLoc); + + // Fall through + default: Diag(AtLoc, diag::err_unexpected_at); SkipUntil(tok::semi); diff --git a/test/Modules/Inputs/DependsOnModule.framework/Headers/DependsOnModule.h b/test/Modules/Inputs/DependsOnModule.framework/Headers/DependsOnModule.h index 8ce3520a3c..d2a5174dfe 100644 --- a/test/Modules/Inputs/DependsOnModule.framework/Headers/DependsOnModule.h +++ b/test/Modules/Inputs/DependsOnModule.framework/Headers/DependsOnModule.h @@ -1,5 +1,5 @@ #include //expected-warning{{treating #include as an import of module 'Module'}} #define DEPENDS_ON_MODULE 1 -#__private_macro__ DEPENDS_ON_MODULE +#private DEPENDS_ON_MODULE diff --git a/test/Modules/Inputs/Module.framework/Frameworks/SubFramework.framework/Headers/SubFramework.h b/test/Modules/Inputs/Module.framework/Frameworks/SubFramework.framework/Headers/SubFramework.h index a7b33f346e..b13bcdd766 100644 --- a/test/Modules/Inputs/Module.framework/Frameworks/SubFramework.framework/Headers/SubFramework.h +++ b/test/Modules/Inputs/Module.framework/Frameworks/SubFramework.framework/Headers/SubFramework.h @@ -1,5 +1,5 @@ #ifndef MODULE_SUBFRAMEWORK_H #define MODULE_SUBFRAMEWORK_H -#__private_macro__ MODULE_SUBFRAMEWORK_H +#private MODULE_SUBFRAMEWORK_H char *module_subframework; #endif diff --git a/test/Modules/Inputs/Module.framework/Headers/Module.h b/test/Modules/Inputs/Module.framework/Headers/Module.h index 3d10112e55..832855f8de 100644 --- a/test/Modules/Inputs/Module.framework/Headers/Module.h +++ b/test/Modules/Inputs/Module.framework/Headers/Module.h @@ -14,7 +14,7 @@ const char *getModuleVersion(void); @end #define MODULE_H_MACRO 1 -#__private_macro__ MODULE_H_MACRO +#private MODULE_H_MACRO #include #include diff --git a/test/Modules/Inputs/macros.h b/test/Modules/Inputs/macros.h index 4be71aaaa0..ed1b46766f 100644 --- a/test/Modules/Inputs/macros.h +++ b/test/Modules/Inputs/macros.h @@ -3,8 +3,8 @@ #define FLOAT float #define DOUBLE double -#__export_macro__ INTEGER -#__private_macro__ FLOAT -#__private_macro__ MODULE +#public INTEGER +#private FLOAT +#private MODULE int (INTEGER); diff --git a/test/Modules/decldef.mm b/test/Modules/decldef.mm index 59361fb5f2..c99fdea0d8 100644 --- a/test/Modules/decldef.mm +++ b/test/Modules/decldef.mm @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -I %S/Inputs -fmodule-cache-path %t %s -verify +// RUN: %clang_cc1 -fmodules -I %S/Inputs -fmodule-cache-path %t %s -verify // in other file: expected-note{{previous definition is here}} diff --git a/test/Modules/header-import.m b/test/Modules/header-import.m index 610a20f549..960eecea22 100644 --- a/test/Modules/header-import.m +++ b/test/Modules/header-import.m @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -fmodule-cache-path %t -F %S/Inputs -I %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -F %S/Inputs -I %S/Inputs -verify %s #import "point.h" @import Module; diff --git a/test/Modules/lookup.m b/test/Modules/lookup.m index 6de7a115cd..7ca0c23a46 100644 --- a/test/Modules/lookup.m +++ b/test/Modules/lookup.m @@ -9,10 +9,10 @@ void test(id x) { } // RUN: rm -rf %t -// RUN: %clang_cc1 -fmodule-cache-path %t -emit-module -x objective-c -fmodule-name=lookup_left_objc %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t -emit-module -x objective-c -fmodule-name=lookup_right_objc %S/Inputs/module.map -// RUN: %clang_cc1 -x objective-c -fmodule-cache-path %t -verify %s -// RUN: %clang_cc1 -ast-print -x objective-c -fmodule-cache-path %t %s | FileCheck -check-prefix=CHECK-PRINT %s +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -emit-module -x objective-c -fmodule-name=lookup_left_objc %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -emit-module -x objective-c -fmodule-name=lookup_right_objc %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -fmodule-cache-path %t -verify %s +// RUN: %clang_cc1 -fmodules -ast-print -x objective-c -fmodule-cache-path %t %s | FileCheck -check-prefix=CHECK-PRINT %s // CHECK-PRINT: - (int) method; // CHECK-PRINT: - (double) method diff --git a/test/Modules/macros.c b/test/Modules/macros.c index e7ab48d4ab..460c482ef9 100644 --- a/test/Modules/macros.c +++ b/test/Modules/macros.c @@ -1,7 +1,7 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -emit-module -fmodule-cache-path %t -fmodule-name=macros %S/Inputs/module.map -// RUN: %clang_cc1 -verify -fmodule-cache-path %t %s -// RUN: %clang_cc1 -E -fmodule-cache-path %t %s | FileCheck -check-prefix CHECK-PREPROCESSED %s +// RUN: %clang_cc1 -fmodules -emit-module -fmodule-cache-path %t -fmodule-name=macros %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -verify -fmodule-cache-path %t %s +// RUN: %clang_cc1 -E -fmodules -fmodule-cache-path %t %s | FileCheck -check-prefix CHECK-PREPROCESSED %s __import_module__ macros; @@ -21,7 +21,7 @@ __import_module__ macros; double d; DOUBLE *dp = &d; -#__export_macro__ WIBBLE // expected-error{{no macro named 'WIBBLE'}} +#public WIBBLE // expected-error{{no macro named 'WIBBLE'}} void f() { // CHECK-PREPROCESSED: int i = INTEGER; diff --git a/test/Modules/objc-categories.m b/test/Modules/objc-categories.m index f571523eb5..2bb07aadc4 100644 --- a/test/Modules/objc-categories.m +++ b/test/Modules/objc-categories.m @@ -1,9 +1,9 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -fmodule-cache-path %t -x objective-c -fmodule-name=category_top -emit-module %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t -x objective-c -fmodule-name=category_left -emit-module %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t -x objective-c -fmodule-name=category_right -emit-module %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t -x objective-c -fmodule-name=category_bottom -emit-module %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t %s -verify +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_top -emit-module %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_left -emit-module %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_right -emit-module %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -x objective-c -fmodule-name=category_bottom -emit-module %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t %s -verify @import category_bottom; diff --git a/test/Modules/on-demand-build-warnings.m b/test/Modules/on-demand-build-warnings.m index 1918689afb..7116f01d38 100644 --- a/test/Modules/on-demand-build-warnings.m +++ b/test/Modules/on-demand-build-warnings.m @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Wmodule-build -fmodule-cache-path %t -F %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fno-objc-infer-related-result-type -Wmodule-build -fmodule-cache-path %t -F %S/Inputs -verify %s @import Module; // expected-warning{{building module 'Module' from source}} diff --git a/test/Modules/on-demand-build.m b/test/Modules/on-demand-build.m index fbd91b1405..7b4a2ea1df 100644 --- a/test/Modules/on-demand-build.m +++ b/test/Modules/on-demand-build.m @@ -1,7 +1,7 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -fmodule-cache-path %t -F %S/Inputs -verify %s -// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -x objective-c++ -fmodule-cache-path %t -F %S/Inputs -verify %s -// RUN: %clang_cc1 -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -fmodule-cache-path %t -F %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -fmodule-cache-path %t -F %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -x objective-c++ -fmodule-cache-path %t -F %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fno-objc-infer-related-result-type -Werror -Wno-error=incomplete-umbrella -fmodule-cache-path %t -F %S/Inputs -verify %s #define FOO @import Module; @interface OtherClass diff --git a/test/Modules/on-demand-macros.m b/test/Modules/on-demand-macros.m index 2b267f15a0..a48ac88c17 100644 --- a/test/Modules/on-demand-macros.m +++ b/test/Modules/on-demand-macros.m @@ -1,6 +1,6 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -fmodule-cache-path %t -F %S/Inputs -DFOO_RETURNS_INT_PTR -verify %s -// RUN: %clang_cc1 -fmodule-cache-path %t -F %S/Inputs -verify %s +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -F %S/Inputs -DFOO_RETURNS_INT_PTR -verify %s +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t -F %S/Inputs -verify %s @import CmdLine; diff --git a/test/Modules/redeclarations.m b/test/Modules/redeclarations.m index bb85f05dfd..d71e9e8600 100644 --- a/test/Modules/redeclarations.m +++ b/test/Modules/redeclarations.m @@ -5,7 +5,7 @@ @end // RUN: rm -rf %t -// RUN: %clang_cc1 -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=redeclarations_left %S/Inputs/module.map -// RUN: %clang_cc1 -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=redeclarations_right %S/Inputs/module.map -// RUN: %clang_cc1 -fmodule-cache-path %t %s -verify +// RUN: %clang_cc1 -fmodules -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=redeclarations_left %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -fmodule-cache-path %t -emit-module -fmodule-name=redeclarations_right %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -fmodule-cache-path %t %s -verify