================ @@ -2686,18 +2693,31 @@ bool Parser::ParseModuleName( } Diag(Tok, diag::err_module_expected_ident) << IsImport; - SkipUntil(tok::semi); + SkipUntil(tok::semi, StopBeforeMatch); return true; } - // Record this part of the module path. - Path.push_back(std::make_pair(Tok.getIdentifierInfo(), Tok.getLocation())); + Token Identifier = Tok; ConsumeToken(); - if (Tok.isNot(tok::period)) - return false; + // P3034R1: Module Declarations Shouldn’t be Macros. + const auto *MI = PP.getMacroInfo(Identifier.getIdentifierInfo()); + if (!IsImport && MI) { + HasMacroInModuleName = true; + if (MI->isFunctionLike()) + SkipUntil(tok::r_paren, tok::period, tok::colon, + StopAtSemi | StopBeforeMatch); + Diag(Identifier, diag::err_module_decl_cannot_be_macros) + << Identifier.getLocation() << IsPartition << MI->isFunctionLike() + << Identifier.getIdentifierInfo(); + } else if (!HasMacroInModuleName) { + // Record this part of the module path. + Path.push_back(std::make_pair(Identifier.getIdentifierInfo(), + Identifier.getLocation())); + } ---------------- yronglin wrote:
Thanks! I've fixed this issue. Hmm, I tried to add a note diagnostic in local, but seems it's a bit noisy and redundant. ``` ➜ test ../rel/bin/clang++ -c -std=c++20 ./lib.cppm ./lib.cppm:6:15: error: the name of a module declaration cannot contains an object-like macro 'A' 6 | export module A.FUNC_LIKE():CC; | ^ ./lib.cppm:6:15: note: object-like macro in the name of a module declaration will not expand 6 | export module A.FUNC_LIKE():CC; | ^ ./lib.cppm:6:17: error: the name of a module declaration cannot contains a function-like macro 'FUNC_LIKE' 6 | export module A.FUNC_LIKE():CC; | ^~~~~~~~~~~ ./lib.cppm:6:17: note: function-like macro in the name of a module partition declaration will not expand 6 | export module A.FUNC_LIKE():CC; | ^~~~~~~~~~~ ./lib.cppm:6:29: error: the name of a module partition declaration cannot contains an object-like macro 'CC' 6 | export module A.FUNC_LIKE():CC; | ^~ ./lib.cppm:6:29: note: object-like macro in the name of a module declaration will not expand 6 | export module A.FUNC_LIKE():CC; | ^~ 3 errors generated. ``` https://github.com/llvm/llvm-project/pull/90574 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits