@@ -84,6 +84,11 @@ static const SupportedConditionalValue SupportedConditionalCompilationEndianness
8484 " big"
8585};
8686
87+ static const SupportedConditionalValue SupportedConditionalCompilationPointerBitWidths[] = {
88+ " _32" ,
89+ " _64"
90+ };
91+
8792static const SupportedConditionalValue SupportedConditionalCompilationRuntimes[] = {
8893 " _ObjC" ,
8994 " _Native" ,
@@ -114,6 +119,8 @@ ArrayRef<SupportedConditionalValue> getSupportedConditionalCompilationValues(con
114119 return SupportedConditionalCompilationArches;
115120 case PlatformConditionKind::Endianness:
116121 return SupportedConditionalCompilationEndianness;
122+ case PlatformConditionKind::PointerBitWidth:
123+ return SupportedConditionalCompilationPointerBitWidths;
117124 case PlatformConditionKind::Runtime:
118125 return SupportedConditionalCompilationRuntimes;
119126 case PlatformConditionKind::CanImport:
@@ -181,6 +188,7 @@ checkPlatformConditionSupported(PlatformConditionKind Kind, StringRef Value,
181188 case PlatformConditionKind::OS:
182189 case PlatformConditionKind::Arch:
183190 case PlatformConditionKind::Endianness:
191+ case PlatformConditionKind::PointerBitWidth:
184192 case PlatformConditionKind::Runtime:
185193 case PlatformConditionKind::TargetEnvironment:
186194 case PlatformConditionKind::PtrAuth:
@@ -405,6 +413,25 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) {
405413 break ;
406414 }
407415
416+ // Set the "_pointerBitWidth" platform condition.
417+ switch (Target.getArch ()) {
418+ default : llvm_unreachable (" undefined architecture pointer bit width" );
419+ case llvm::Triple::ArchType::arm:
420+ case llvm::Triple::ArchType::thumb:
421+ case llvm::Triple::ArchType::aarch64_32:
422+ case llvm::Triple::ArchType::x86:
423+ case llvm::Triple::ArchType::wasm32:
424+ addPlatformConditionValue (PlatformConditionKind::PointerBitWidth, " _32" );
425+ break ;
426+ case llvm::Triple::ArchType::aarch64:
427+ case llvm::Triple::ArchType::ppc64:
428+ case llvm::Triple::ArchType::ppc64le:
429+ case llvm::Triple::ArchType::x86_64:
430+ case llvm::Triple::ArchType::systemz:
431+ addPlatformConditionValue (PlatformConditionKind::PointerBitWidth, " _64" );
432+ break ;
433+ }
434+
408435 // Set the "runtime" platform condition.
409436 addPlatformConditionValue (PlatformConditionKind::Runtime,
410437 EnableObjCInterop ? " _ObjC" : " _Native" );
0 commit comments