Skip to content

Commit 78bf8a0

Browse files
[clang] Don't define predefined macros multiple times
Fix several instances of macros being defined multiple times in several targets. Most of these are just simple duplication in a TargetInfo or OSTargetInfo of things already defined in InitializePredefinedMacros or InitializeStandardPredefinedMacros, but there are a few that aren't: * AArch64 defines a couple of feature macros for armv8.1a that are handled generically by getTargetDefines. * CSKY needs to take care when CPUName and ArchName are the same. * Many os/target combinations result in __ELF__ being defined twice. Instead define __ELF__ just once in InitPreprocessor based on the Triple, which already knows what the object format is based on os and target. These changes shouldn't change the final result of which macros are defined, with the exception of the changes to __ELF__ where if you explicitly specify the object type in the triple then this affects if __ELF__ is defined, e.g. --target=i686-windows-elf results in it being defined where it wasn't before, but this is more accurate as an ELF file is in fact generated. Differential Revision: https://reviews.llvm.org/D150966
1 parent 8d6356e commit 78bf8a0

File tree

13 files changed

+216
-57
lines changed

13 files changed

+216
-57
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,6 @@ void AArch64TargetInfo::fillValidCPUList(
238238
void AArch64TargetInfo::getTargetDefinesARMV81A(const LangOptions &Opts,
239239
MacroBuilder &Builder) const {
240240
Builder.defineMacro("__ARM_FEATURE_QRDMX", "1");
241-
Builder.defineMacro("__ARM_FEATURE_ATOMICS", "1");
242-
Builder.defineMacro("__ARM_FEATURE_CRC32", "1");
243241
}
244242

245243
void AArch64TargetInfo::getTargetDefinesARMV82A(const LangOptions &Opts,
@@ -335,16 +333,6 @@ void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
335333
Builder.defineMacro("__aarch64__");
336334
// Inline assembly supports AArch64 flag outputs.
337335
Builder.defineMacro("__GCC_ASM_FLAG_OUTPUTS__");
338-
// For bare-metal.
339-
if (getTriple().getOS() == llvm::Triple::UnknownOS &&
340-
getTriple().isOSBinFormatELF())
341-
Builder.defineMacro("__ELF__");
342-
343-
// Target properties.
344-
if (!getTriple().isOSWindows() && getTriple().isArch64Bit()) {
345-
Builder.defineMacro("_LP64");
346-
Builder.defineMacro("__LP64__");
347-
}
348336

349337
std::string CodeModel = getTargetOpts().CodeModel;
350338
if (CodeModel == "default")
@@ -1523,7 +1511,6 @@ void DarwinAArch64TargetInfo::getOSDefines(const LangOptions &Opts,
15231511
else
15241512
Builder.defineMacro("__ARM64_ARCH_8__");
15251513
Builder.defineMacro("__ARM_NEON__");
1526-
Builder.defineMacro("__LITTLE_ENDIAN__");
15271514
Builder.defineMacro("__REGISTER_PREFIX__", "");
15281515
Builder.defineMacro("__arm64", "1");
15291516
Builder.defineMacro("__arm64__", "1");

clang/lib/Basic/Targets/ARM.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -711,10 +711,9 @@ void ARMTargetInfo::getTargetDefines(const LangOptions &Opts,
711711
// For bare-metal none-eabi.
712712
if (getTriple().getOS() == llvm::Triple::UnknownOS &&
713713
(getTriple().getEnvironment() == llvm::Triple::EABI ||
714-
getTriple().getEnvironment() == llvm::Triple::EABIHF)) {
715-
Builder.defineMacro("__ELF__");
716-
if (Opts.CPlusPlus)
717-
Builder.defineMacro("_GNU_SOURCE");
714+
getTriple().getEnvironment() == llvm::Triple::EABIHF) &&
715+
Opts.CPlusPlus) {
716+
Builder.defineMacro("_GNU_SOURCE");
718717
}
719718

720719
// Target properties.

clang/lib/Basic/Targets/AVR.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,6 @@ void AVRTargetInfo::getTargetDefines(const LangOptions &Opts,
450450
Builder.defineMacro("AVR");
451451
Builder.defineMacro("__AVR");
452452
Builder.defineMacro("__AVR__");
453-
Builder.defineMacro("__ELF__");
454453

455454
if (ABI == "avrtiny")
456455
Builder.defineMacro("__AVR_TINY__", "1");

clang/lib/Basic/Targets/CSKY.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ bool CSKYTargetInfo::setCPU(const std::string &Name) {
3333

3434
void CSKYTargetInfo::getTargetDefines(const LangOptions &Opts,
3535
MacroBuilder &Builder) const {
36-
Builder.defineMacro("__ELF__");
3736
Builder.defineMacro("__csky__", "2");
3837
Builder.defineMacro("__CSKY__", "2");
3938
Builder.defineMacro("__ckcore__", "2");
@@ -52,8 +51,10 @@ void CSKYTargetInfo::getTargetDefines(const LangOptions &Opts,
5251

5352
Builder.defineMacro("__" + ArchName.upper() + "__");
5453
Builder.defineMacro("__" + ArchName.lower() + "__");
55-
Builder.defineMacro("__" + CPUName.upper() + "__");
56-
Builder.defineMacro("__" + CPUName.lower() + "__");
54+
if (ArchName != CPUName) {
55+
Builder.defineMacro("__" + CPUName.upper() + "__");
56+
Builder.defineMacro("__" + CPUName.lower() + "__");
57+
}
5758

5859
// TODO: Add support for BE if BE was supported later
5960
StringRef endian = "__cskyLE__";

clang/lib/Basic/Targets/Hexagon.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ void HexagonTargetInfo::getTargetDefines(const LangOptions &Opts,
2424
Builder.defineMacro("__qdsp6__", "1");
2525
Builder.defineMacro("__hexagon__", "1");
2626

27-
Builder.defineMacro("__ELF__");
28-
2927
// The macro __HVXDBL__ is deprecated.
3028
bool DefineHvxDbl = false;
3129

clang/lib/Basic/Targets/Le64.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,4 @@ void Le64TargetInfo::getTargetDefines(const LangOptions &Opts,
2727
MacroBuilder &Builder) const {
2828
DefineStd(Builder, "unix", Opts);
2929
defineCPUMacros(Builder, "le64", /*Tuning=*/false);
30-
Builder.defineMacro("__ELF__");
3130
}

clang/lib/Basic/Targets/MSP430.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,5 @@ void MSP430TargetInfo::getTargetDefines(const LangOptions &Opts,
2929
MacroBuilder &Builder) const {
3030
Builder.defineMacro("MSP430");
3131
Builder.defineMacro("__MSP430__");
32-
Builder.defineMacro("__ELF__");
3332
// FIXME: defines for different 'flavours' of MCU
3433
}

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,9 @@ class LLVM_LIBRARY_VISIBILITY CloudABITargetInfo : public OSTargetInfo<Target> {
4141
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
4242
MacroBuilder &Builder) const override {
4343
Builder.defineMacro("__CloudABI__");
44-
Builder.defineMacro("__ELF__");
4544

4645
// CloudABI uses ISO/IEC 10646:2012 for wchar_t, char16_t and char32_t.
4746
Builder.defineMacro("__STDC_ISO_10646__", "201206L");
48-
Builder.defineMacro("__STDC_UTF_16__");
49-
Builder.defineMacro("__STDC_UTF_32__");
5047
}
5148

5249
public:
@@ -61,7 +58,6 @@ class LLVM_LIBRARY_VISIBILITY AnanasTargetInfo : public OSTargetInfo<Target> {
6158
MacroBuilder &Builder) const override {
6259
// Ananas defines
6360
Builder.defineMacro("__Ananas__");
64-
Builder.defineMacro("__ELF__");
6561
}
6662

6763
public:
@@ -177,7 +173,6 @@ class LLVM_LIBRARY_VISIBILITY DragonFlyBSDTargetInfo
177173
// DragonFly defines; list based off of gcc output
178174
Builder.defineMacro("__DragonFly__");
179175
Builder.defineMacro("__DragonFly_cc_version", "100001");
180-
Builder.defineMacro("__ELF__");
181176
Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
182177
Builder.defineMacro("__tune_i386__");
183178
DefineStd(Builder, "unix", Opts);
@@ -222,7 +217,6 @@ class LLVM_LIBRARY_VISIBILITY FreeBSDTargetInfo : public OSTargetInfo<Target> {
222217
Builder.defineMacro("__FreeBSD_cc_version", Twine(CCVersion));
223218
Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
224219
DefineStd(Builder, "unix", Opts);
225-
Builder.defineMacro("__ELF__");
226220

227221
// On FreeBSD, wchar_t contains the number of the code point as
228222
// used by the character set of the locale. These character sets are
@@ -274,7 +268,6 @@ class LLVM_LIBRARY_VISIBILITY KFreeBSDTargetInfo : public OSTargetInfo<Target> {
274268
DefineStd(Builder, "unix", Opts);
275269
Builder.defineMacro("__FreeBSD_kernel__");
276270
Builder.defineMacro("__GLIBC__");
277-
Builder.defineMacro("__ELF__");
278271
if (Opts.POSIXThreads)
279272
Builder.defineMacro("_REENTRANT");
280273
if (Opts.CPlusPlus)
@@ -293,7 +286,6 @@ class LLVM_LIBRARY_VISIBILITY HaikuTargetInfo : public OSTargetInfo<Target> {
293286
MacroBuilder &Builder) const override {
294287
// Haiku defines; list based off of gcc output
295288
Builder.defineMacro("__HAIKU__");
296-
Builder.defineMacro("__ELF__");
297289
DefineStd(Builder, "unix", Opts);
298290
if (this->HasFloat128)
299291
Builder.defineMacro("__FLOAT128__");
@@ -330,7 +322,6 @@ class LLVM_LIBRARY_VISIBILITY HurdTargetInfo : public OSTargetInfo<Target> {
330322
Builder.defineMacro("__gnu_hurd__");
331323
Builder.defineMacro("__MACH__");
332324
Builder.defineMacro("__GLIBC__");
333-
Builder.defineMacro("__ELF__");
334325
if (Opts.POSIXThreads)
335326
Builder.defineMacro("_REENTRANT");
336327
if (Opts.CPlusPlus)
@@ -355,7 +346,6 @@ class LLVM_LIBRARY_VISIBILITY MinixTargetInfo : public OSTargetInfo<Target> {
355346
Builder.defineMacro("_EM_LSIZE", "4");
356347
Builder.defineMacro("_EM_FSIZE", "4");
357348
Builder.defineMacro("_EM_DSIZE", "8");
358-
Builder.defineMacro("__ELF__");
359349
DefineStd(Builder, "unix", Opts);
360350
}
361351

@@ -372,7 +362,6 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
372362
// Linux defines; list based off of gcc output
373363
DefineStd(Builder, "unix", Opts);
374364
DefineStd(Builder, "linux", Opts);
375-
Builder.defineMacro("__ELF__");
376365
if (Triple.isAndroid()) {
377366
Builder.defineMacro("__ANDROID__", "1");
378367
this->PlatformName = "android";
@@ -434,7 +423,6 @@ class LLVM_LIBRARY_VISIBILITY NetBSDTargetInfo : public OSTargetInfo<Target> {
434423
// NetBSD defines; list based off of gcc output
435424
Builder.defineMacro("__NetBSD__");
436425
Builder.defineMacro("__unix__");
437-
Builder.defineMacro("__ELF__");
438426
if (Opts.POSIXThreads)
439427
Builder.defineMacro("_REENTRANT");
440428
}
@@ -456,7 +444,6 @@ class LLVM_LIBRARY_VISIBILITY OpenBSDTargetInfo : public OSTargetInfo<Target> {
456444

457445
Builder.defineMacro("__OpenBSD__");
458446
DefineStd(Builder, "unix", Opts);
459-
Builder.defineMacro("__ELF__");
460447
if (Opts.POSIXThreads)
461448
Builder.defineMacro("_REENTRANT");
462449
if (this->HasFloat128)
@@ -502,10 +489,8 @@ class LLVM_LIBRARY_VISIBILITY PS3PPUTargetInfo : public OSTargetInfo<Target> {
502489
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
503490
MacroBuilder &Builder) const override {
504491
// PS3 PPU defines.
505-
Builder.defineMacro("__PPC__");
506492
Builder.defineMacro("__PPU__");
507493
Builder.defineMacro("__CELLOS_LV2__");
508-
Builder.defineMacro("__ELF__");
509494
Builder.defineMacro("__LP32__");
510495
Builder.defineMacro("_ARCH_PPC64");
511496
Builder.defineMacro("__powerpc64__");
@@ -533,7 +518,6 @@ class LLVM_LIBRARY_VISIBILITY PSOSTargetInfo : public OSTargetInfo<Target> {
533518
Builder.defineMacro("__FreeBSD_cc_version", "900001");
534519
Builder.defineMacro("__KPRINTF_ATTRIBUTE__");
535520
DefineStd(Builder, "unix", Opts);
536-
Builder.defineMacro("__ELF__");
537521
Builder.defineMacro("__SCE__");
538522
Builder.defineMacro("__STDC_NO_COMPLEX__");
539523
Builder.defineMacro("__STDC_NO_THREADS__");
@@ -608,7 +592,6 @@ class LLVM_LIBRARY_VISIBILITY RTEMSTargetInfo : public OSTargetInfo<Target> {
608592
// RTEMS defines; list based off of gcc output
609593

610594
Builder.defineMacro("__rtems__");
611-
Builder.defineMacro("__ELF__");
612595
if (Opts.CPlusPlus)
613596
Builder.defineMacro("_GNU_SOURCE");
614597
}
@@ -643,7 +626,6 @@ class LLVM_LIBRARY_VISIBILITY SolarisTargetInfo : public OSTargetInfo<Target> {
643626
MacroBuilder &Builder) const override {
644627
DefineStd(Builder, "sun", Opts);
645628
DefineStd(Builder, "unix", Opts);
646-
Builder.defineMacro("__ELF__");
647629
Builder.defineMacro("__svr4__");
648630
Builder.defineMacro("__SVR4");
649631
// Solaris headers require _XOPEN_SOURCE to be set to 600 for C99 and
@@ -874,7 +856,6 @@ class LLVM_LIBRARY_VISIBILITY NaClTargetInfo : public OSTargetInfo<Target> {
874856
Builder.defineMacro("_GNU_SOURCE");
875857

876858
DefineStd(Builder, "unix", Opts);
877-
Builder.defineMacro("__ELF__");
878859
Builder.defineMacro("__native_client__");
879860
}
880861

@@ -921,7 +902,6 @@ class LLVM_LIBRARY_VISIBILITY FuchsiaTargetInfo : public OSTargetInfo<Target> {
921902
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
922903
MacroBuilder &Builder) const override {
923904
Builder.defineMacro("__Fuchsia__");
924-
Builder.defineMacro("__ELF__");
925905
if (Opts.POSIXThreads)
926906
Builder.defineMacro("_REENTRANT");
927907
// Required by the libc++ locale support.
@@ -1016,8 +996,6 @@ class LLVM_LIBRARY_VISIBILITY OHOSTargetInfo : public OSTargetInfo<Target> {
1016996
// Linux defines; list based off of gcc output
1017997
DefineStd(Builder, "unix", Opts);
1018998

1019-
Builder.defineMacro("__ELF__");
1020-
1021999
// Generic OHOS target defines
10221000
if (Triple.isOHOSFamily()) {
10231001
Builder.defineMacro("__OHOS_FAMILY__", "1");

clang/lib/Basic/Targets/RISCV.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ static unsigned getVersionValue(unsigned MajorVersion, unsigned MinorVersion) {
124124

125125
void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
126126
MacroBuilder &Builder) const {
127-
Builder.defineMacro("__ELF__");
128127
Builder.defineMacro("__riscv");
129128
bool Is64Bit = getTriple().getArch() == llvm::Triple::riscv64;
130129
Builder.defineMacro("__riscv_xlen", Is64Bit ? "64" : "32");

clang/lib/Basic/Targets/VE.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,8 @@ static constexpr Builtin::Info BuiltinInfo[] = {
2626

2727
void VETargetInfo::getTargetDefines(const LangOptions &Opts,
2828
MacroBuilder &Builder) const {
29-
Builder.defineMacro("_LP64", "1");
30-
Builder.defineMacro("unix", "1");
31-
Builder.defineMacro("__unix__", "1");
32-
Builder.defineMacro("__linux__", "1");
3329
Builder.defineMacro("__ve", "1");
3430
Builder.defineMacro("__ve__", "1");
35-
Builder.defineMacro("__STDC_HOSTED__", "1");
36-
Builder.defineMacro("__STDC__", "1");
3731
Builder.defineMacro("__NEC__", "1");
3832
// FIXME: define __FAST_MATH__ 1 if -ffast-math is enabled
3933
// FIXME: define __OPTIMIZE__ n if -On is enabled

clang/lib/Frontend/InitPreprocessor.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
12991299
Builder.defineMacro("__GLIBCXX_BITSIZE_INT_N_0", "128");
13001300
}
13011301

1302+
// ELF targets define __ELF__
1303+
if (TI.getTriple().isOSBinFormatELF())
1304+
Builder.defineMacro("__ELF__");
1305+
13021306
// Get other target #defines.
13031307
TI.getTargetDefines(LangOpts, Builder);
13041308
}

clang/test/Preprocessor/init-ve.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
/// REQUIRES: ve-registered-target
33

44
// RUN: %clang_cc1 -E -dM -triple=ve < /dev/null | \
5-
// RUN: FileCheck -match-full-lines -check-prefix VE %s
5+
// RUN: FileCheck -match-full-lines -check-prefixes=VE,VE-HOSTED %s
6+
// RUN: %clang_cc1 -E -dM -triple=ve -ffreestanding < /dev/null | \
7+
// RUN: FileCheck -match-full-lines -check-prefixes=VE,VE-FREESTANDING %s
68
// RUN: %clang_cc1 -x c++ -E -dM -triple=ve < /dev/null | \
7-
// RUN: FileCheck -match-full-lines -check-prefix VE -check-prefix VE-CXX %s
9+
// RUN: FileCheck -match-full-lines -check-prefixes=VE,VE-HOSTED,VE-CXX %s
810
//
911
// VE:#define _LP64 1
1012
// VE:#define __BIGGEST_ALIGNMENT__ 8
@@ -160,7 +162,8 @@
160162
// VE:#define __SIZE_TYPE__ long unsigned int
161163
// VE:#define __SIZE_WIDTH__ 64
162164
// VE-CXX:#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16UL
163-
// VE:#define __STDC_HOSTED__ 1
165+
// VE-HOSTED:#define __STDC_HOSTED__ 1
166+
// VE-FREESTANDING:#define __STDC_HOSTED__ 0
164167
// VE:#define __UINT16_C_SUFFIX__
165168
// VE:#define __UINT16_FMTX__ "hX"
166169
// VE:#define __UINT16_FMTo__ "ho"

0 commit comments

Comments
 (0)