Merge pull request #84260 from egorzhdan/egorzhdan/macro-out-of-date

[cxx-interop] Import complex macros consistently in C++ language mode
This commit is contained in:
Egor Zhdan
2025-09-13 00:07:44 +01:00
committed by GitHub
3 changed files with 16 additions and 7 deletions

View File

@@ -333,12 +333,16 @@ getIntegerConstantForMacroToken(ClangImporter::Implementation &impl,
}
// Macro identifier.
// TODO: for some reason when in C++ mode, "hasMacroDefinition" is often
// false: rdar://110071334
} else if (token.is(clang::tok::identifier) &&
token.getIdentifierInfo()->hasMacroDefinition()) {
} else if (token.is(clang::tok::identifier)) {
auto rawID = token.getIdentifierInfo();
// When importing in (Objective-)C++ language mode, sometimes a macro might
// have an outdated identifier info, which would cause Clang preprocessor to
// assume that it does not have a definition.
if (rawID->isOutOfDate())
(void)impl.getClangPreprocessor().getLeafModuleMacros(rawID);
auto definition = impl.getClangPreprocessor().getMacroDefinition(rawID);
if (!definition)
return std::nullopt;

View File

@@ -1,7 +1,5 @@
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -typecheck -verify %s
// Most of these don't pass: rdar://110071334
// %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-experimental-cxx-interop -enable-objc-interop -typecheck -verify %s
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -cxx-interoperability-mode=default -enable-objc-interop -typecheck -verify %s
@_exported import macros

View File

@@ -0,0 +1,7 @@
// RUN: %target-swift-frontend -cxx-interoperability-mode=default -typecheck -verify -I %S/Inputs %s
// REQUIRES: OS=macosx
import Darwin
let _ = COPYFILE_ALL