Skip to content

Commit 60a6830

Browse files
committed
[clang] Support diagnosing in TargetInfo::getTargetDefines()
This allows reporting target-specific diagnostics when checking conditions for predefined macros
1 parent f13e462 commit 60a6830

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+258
-207
lines changed

clang/include/clang/Basic/TargetInfo.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,9 +1004,8 @@ class TargetInfo : public TransferrableTargetInfo,
10041004

10051005
/// Appends the target-specific \#define values for this
10061006
/// target set to the specified buffer.
1007-
virtual void getTargetDefines(const LangOptions &Opts,
1008-
MacroBuilder &Builder) const = 0;
1009-
1007+
virtual void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
1008+
DiagnosticsEngine &Diags) const = 0;
10101009

10111010
/// Return information about target-specific builtins for
10121011
/// the current primary target, and info about which builtins are non-portable

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ void AArch64TargetInfo::getTargetDefinesARMV95A(const LangOptions &Opts,
374374
}
375375

376376
void AArch64TargetInfo::getTargetDefines(const LangOptions &Opts,
377-
MacroBuilder &Builder) const {
377+
MacroBuilder &Builder,
378+
DiagnosticsEngine &Diags) const {
378379
// Target identification.
379380
if (getTriple().isWindowsArm64EC()) {
380381
// Define the same set of macros as would be defined on x86_64 to ensure that
@@ -1530,21 +1531,23 @@ void AArch64leTargetInfo::setDataLayout() {
15301531
}
15311532

15321533
void AArch64leTargetInfo::getTargetDefines(const LangOptions &Opts,
1533-
MacroBuilder &Builder) const {
1534+
MacroBuilder &Builder,
1535+
DiagnosticsEngine &Diags) const {
15341536
Builder.defineMacro("__AARCH64EL__");
1535-
AArch64TargetInfo::getTargetDefines(Opts, Builder);
1537+
AArch64TargetInfo::getTargetDefines(Opts, Builder, Diags);
15361538
}
15371539

15381540
AArch64beTargetInfo::AArch64beTargetInfo(const llvm::Triple &Triple,
15391541
const TargetOptions &Opts)
15401542
: AArch64TargetInfo(Triple, Opts) {}
15411543

15421544
void AArch64beTargetInfo::getTargetDefines(const LangOptions &Opts,
1543-
MacroBuilder &Builder) const {
1545+
MacroBuilder &Builder,
1546+
DiagnosticsEngine &Diags) const {
15441547
Builder.defineMacro("__AARCH64EB__");
15451548
Builder.defineMacro("__AARCH_BIG_ENDIAN");
15461549
Builder.defineMacro("__ARM_BIG_ENDIAN");
1547-
AArch64TargetInfo::getTargetDefines(Opts, Builder);
1550+
AArch64TargetInfo::getTargetDefines(Opts, Builder, Diags);
15481551
}
15491552

15501553
void AArch64beTargetInfo::setDataLayout() {
@@ -1613,9 +1616,10 @@ MicrosoftARM64TargetInfo::MicrosoftARM64TargetInfo(const llvm::Triple &Triple,
16131616
TheCXXABI.set(TargetCXXABI::Microsoft);
16141617
}
16151618

1616-
void MicrosoftARM64TargetInfo::getTargetDefines(const LangOptions &Opts,
1617-
MacroBuilder &Builder) const {
1618-
WindowsARM64TargetInfo::getTargetDefines(Opts, Builder);
1619+
void MicrosoftARM64TargetInfo::getTargetDefines(
1620+
const LangOptions &Opts, MacroBuilder &Builder,
1621+
DiagnosticsEngine &Diags) const {
1622+
WindowsARM64TargetInfo::getTargetDefines(Opts, Builder, Diags);
16191623
if (getTriple().isWindowsArm64EC()) {
16201624
Builder.defineMacro("_M_X64", "100");
16211625
Builder.defineMacro("_M_AMD64", "100");
@@ -1713,8 +1717,9 @@ RenderScript64TargetInfo::RenderScript64TargetInfo(const llvm::Triple &Triple,
17131717
IsRenderScriptTarget = true;
17141718
}
17151719

1716-
void RenderScript64TargetInfo::getTargetDefines(const LangOptions &Opts,
1717-
MacroBuilder &Builder) const {
1720+
void RenderScript64TargetInfo::getTargetDefines(
1721+
const LangOptions &Opts, MacroBuilder &Builder,
1722+
DiagnosticsEngine &Diags) const {
17181723
Builder.defineMacro("__RENDERSCRIPT__");
1719-
AArch64leTargetInfo::getTargetDefines(Opts, Builder);
1724+
AArch64leTargetInfo::getTargetDefines(Opts, Builder, Diags);
17201725
}

clang/lib/Basic/Targets/AArch64.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
148148
MacroBuilder &Builder) const;
149149
void getTargetDefinesARMV95A(const LangOptions &Opts,
150150
MacroBuilder &Builder) const;
151-
void getTargetDefines(const LangOptions &Opts,
152-
MacroBuilder &Builder) const override;
151+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
152+
DiagnosticsEngine &Diags) const override;
153153

154154
ArrayRef<Builtin::Info> getTargetBuiltins() const override;
155155

@@ -211,8 +211,9 @@ class LLVM_LIBRARY_VISIBILITY AArch64leTargetInfo : public AArch64TargetInfo {
211211
public:
212212
AArch64leTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
213213

214-
void getTargetDefines(const LangOptions &Opts,
215-
MacroBuilder &Builder) const override;
214+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
215+
DiagnosticsEngine &Diags) const override;
216+
216217
private:
217218
void setDataLayout() override;
218219
};
@@ -239,8 +240,8 @@ class LLVM_LIBRARY_VISIBILITY MicrosoftARM64TargetInfo
239240
MicrosoftARM64TargetInfo(const llvm::Triple &Triple,
240241
const TargetOptions &Opts);
241242

242-
void getTargetDefines(const LangOptions &Opts,
243-
MacroBuilder &Builder) const override;
243+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
244+
DiagnosticsEngine &Diags) const override;
244245
TargetInfo::CallingConvKind
245246
getCallingConvKind(bool ClangABICompat4) const override;
246247

@@ -258,8 +259,8 @@ class LLVM_LIBRARY_VISIBILITY MinGWARM64TargetInfo
258259
class LLVM_LIBRARY_VISIBILITY AArch64beTargetInfo : public AArch64TargetInfo {
259260
public:
260261
AArch64beTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
261-
void getTargetDefines(const LangOptions &Opts,
262-
MacroBuilder &Builder) const override;
262+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
263+
DiagnosticsEngine &Diags) const override;
263264

264265
private:
265266
void setDataLayout() override;
@@ -284,8 +285,8 @@ class LLVM_LIBRARY_VISIBILITY RenderScript64TargetInfo
284285
RenderScript64TargetInfo(const llvm::Triple &Triple,
285286
const TargetOptions &Opts);
286287

287-
void getTargetDefines(const LangOptions &Opts,
288-
MacroBuilder &Builder) const override;
288+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
289+
DiagnosticsEngine &Diags) const override;
289290
};
290291

291292
} // namespace targets

clang/lib/Basic/Targets/AMDGPU.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,8 @@ ArrayRef<Builtin::Info> AMDGPUTargetInfo::getTargetBuiltins() const {
272272
}
273273

274274
void AMDGPUTargetInfo::getTargetDefines(const LangOptions &Opts,
275-
MacroBuilder &Builder) const {
275+
MacroBuilder &Builder,
276+
DiagnosticsEngine &Diags) const {
276277
Builder.defineMacro("__AMD__");
277278
Builder.defineMacro("__AMDGPU__");
278279

clang/lib/Basic/Targets/AMDGPU.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,8 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUTargetInfo final : public TargetInfo {
248248

249249
bool useFP16ConversionIntrinsics() const override { return false; }
250250

251-
void getTargetDefines(const LangOptions &Opts,
252-
MacroBuilder &Builder) const override;
251+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
252+
DiagnosticsEngine &Diags) const override;
253253

254254
BuiltinVaListKind getBuiltinVaListKind() const override {
255255
return TargetInfo::CharPtrBuiltinVaList;

clang/lib/Basic/Targets/ARC.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ using namespace clang;
1919
using namespace clang::targets;
2020

2121
void ARCTargetInfo::getTargetDefines(const LangOptions &Opts,
22-
MacroBuilder &Builder) const {
22+
MacroBuilder &Builder,
23+
DiagnosticsEngine &Diags) const {
2324
Builder.defineMacro("__arc__");
2425
}

clang/lib/Basic/Targets/ARC.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class LLVM_LIBRARY_VISIBILITY ARCTargetInfo : public TargetInfo {
3737
"i32:32:32-f32:32:32-i64:32-f64:32-a:0:32-n32");
3838
}
3939

40-
void getTargetDefines(const LangOptions &Opts,
41-
MacroBuilder &Builder) const override;
40+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
41+
DiagnosticsEngine &Diags) const override;
4242

4343
ArrayRef<Builtin::Info> getTargetBuiltins() const override {
4444
return std::nullopt;

clang/lib/Basic/Targets/ARM.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,8 @@ void ARMTargetInfo::getTargetDefinesARMV83A(const LangOptions &Opts,
712712
}
713713

714714
void ARMTargetInfo::getTargetDefines(const LangOptions &Opts,
715-
MacroBuilder &Builder) const {
715+
MacroBuilder &Builder,
716+
DiagnosticsEngine &Diags) const {
716717
// Target identification.
717718
Builder.defineMacro("__arm");
718719
Builder.defineMacro("__arm__");
@@ -1349,20 +1350,22 @@ ARMleTargetInfo::ARMleTargetInfo(const llvm::Triple &Triple,
13491350
: ARMTargetInfo(Triple, Opts) {}
13501351

13511352
void ARMleTargetInfo::getTargetDefines(const LangOptions &Opts,
1352-
MacroBuilder &Builder) const {
1353+
MacroBuilder &Builder,
1354+
DiagnosticsEngine &Diags) const {
13531355
Builder.defineMacro("__ARMEL__");
1354-
ARMTargetInfo::getTargetDefines(Opts, Builder);
1356+
ARMTargetInfo::getTargetDefines(Opts, Builder, Diags);
13551357
}
13561358

13571359
ARMbeTargetInfo::ARMbeTargetInfo(const llvm::Triple &Triple,
13581360
const TargetOptions &Opts)
13591361
: ARMTargetInfo(Triple, Opts) {}
13601362

13611363
void ARMbeTargetInfo::getTargetDefines(const LangOptions &Opts,
1362-
MacroBuilder &Builder) const {
1364+
MacroBuilder &Builder,
1365+
DiagnosticsEngine &Diags) const {
13631366
Builder.defineMacro("__ARMEB__");
13641367
Builder.defineMacro("__ARM_BIG_ENDIAN");
1365-
ARMTargetInfo::getTargetDefines(Opts, Builder);
1368+
ARMTargetInfo::getTargetDefines(Opts, Builder, Diags);
13661369
}
13671370

13681371
WindowsARMTargetInfo::WindowsARMTargetInfo(const llvm::Triple &Triple,
@@ -1421,8 +1424,9 @@ ItaniumWindowsARMleTargetInfo::ItaniumWindowsARMleTargetInfo(
14211424
}
14221425

14231426
void ItaniumWindowsARMleTargetInfo::getTargetDefines(
1424-
const LangOptions &Opts, MacroBuilder &Builder) const {
1425-
WindowsARMTargetInfo::getTargetDefines(Opts, Builder);
1427+
const LangOptions &Opts, MacroBuilder &Builder,
1428+
DiagnosticsEngine &Diags) const {
1429+
WindowsARMTargetInfo::getTargetDefines(Opts, Builder, Diags);
14261430

14271431
if (Opts.MSVCCompat)
14281432
WindowsARMTargetInfo::getVisualStudioDefines(Opts, Builder);
@@ -1435,9 +1439,10 @@ MicrosoftARMleTargetInfo::MicrosoftARMleTargetInfo(const llvm::Triple &Triple,
14351439
TheCXXABI.set(TargetCXXABI::Microsoft);
14361440
}
14371441

1438-
void MicrosoftARMleTargetInfo::getTargetDefines(const LangOptions &Opts,
1439-
MacroBuilder &Builder) const {
1440-
WindowsARMTargetInfo::getTargetDefines(Opts, Builder);
1442+
void MicrosoftARMleTargetInfo::getTargetDefines(
1443+
const LangOptions &Opts, MacroBuilder &Builder,
1444+
DiagnosticsEngine &Diags) const {
1445+
WindowsARMTargetInfo::getTargetDefines(Opts, Builder, Diags);
14411446
WindowsARMTargetInfo::getVisualStudioDefines(Opts, Builder);
14421447
}
14431448

@@ -1448,8 +1453,9 @@ MinGWARMTargetInfo::MinGWARMTargetInfo(const llvm::Triple &Triple,
14481453
}
14491454

14501455
void MinGWARMTargetInfo::getTargetDefines(const LangOptions &Opts,
1451-
MacroBuilder &Builder) const {
1452-
WindowsARMTargetInfo::getTargetDefines(Opts, Builder);
1456+
MacroBuilder &Builder,
1457+
DiagnosticsEngine &Diags) const {
1458+
WindowsARMTargetInfo::getTargetDefines(Opts, Builder, Diags);
14531459
Builder.defineMacro("_ARM_");
14541460
}
14551461

@@ -1463,8 +1469,9 @@ CygwinARMTargetInfo::CygwinARMTargetInfo(const llvm::Triple &Triple,
14631469
}
14641470

14651471
void CygwinARMTargetInfo::getTargetDefines(const LangOptions &Opts,
1466-
MacroBuilder &Builder) const {
1467-
ARMleTargetInfo::getTargetDefines(Opts, Builder);
1472+
MacroBuilder &Builder,
1473+
DiagnosticsEngine &Diags) const {
1474+
ARMleTargetInfo::getTargetDefines(Opts, Builder, Diags);
14681475
Builder.defineMacro("_ARM_");
14691476
Builder.defineMacro("__CYGWIN__");
14701477
Builder.defineMacro("__CYGWIN32__");
@@ -1503,8 +1510,9 @@ RenderScript32TargetInfo::RenderScript32TargetInfo(const llvm::Triple &Triple,
15031510
LongWidth = LongAlign = 64;
15041511
}
15051512

1506-
void RenderScript32TargetInfo::getTargetDefines(const LangOptions &Opts,
1507-
MacroBuilder &Builder) const {
1513+
void RenderScript32TargetInfo::getTargetDefines(
1514+
const LangOptions &Opts, MacroBuilder &Builder,
1515+
DiagnosticsEngine &Diags) const {
15081516
Builder.defineMacro("__RENDERSCRIPT__");
1509-
ARMleTargetInfo::getTargetDefines(Opts, Builder);
1517+
ARMleTargetInfo::getTargetDefines(Opts, Builder, Diags);
15101518
}

clang/lib/Basic/Targets/ARM.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ class LLVM_LIBRARY_VISIBILITY ARMTargetInfo : public TargetInfo {
193193
MacroBuilder &Builder) const;
194194
void getTargetDefinesARMV83A(const LangOptions &Opts,
195195
MacroBuilder &Builder) const;
196-
void getTargetDefines(const LangOptions &Opts,
197-
MacroBuilder &Builder) const override;
196+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
197+
DiagnosticsEngine &Diags) const override;
198198

199199
ArrayRef<Builtin::Info> getTargetBuiltins() const override;
200200

@@ -234,15 +234,15 @@ class LLVM_LIBRARY_VISIBILITY ARMTargetInfo : public TargetInfo {
234234
class LLVM_LIBRARY_VISIBILITY ARMleTargetInfo : public ARMTargetInfo {
235235
public:
236236
ARMleTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
237-
void getTargetDefines(const LangOptions &Opts,
238-
MacroBuilder &Builder) const override;
237+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
238+
DiagnosticsEngine &Diags) const override;
239239
};
240240

241241
class LLVM_LIBRARY_VISIBILITY ARMbeTargetInfo : public ARMTargetInfo {
242242
public:
243243
ARMbeTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
244-
void getTargetDefines(const LangOptions &Opts,
245-
MacroBuilder &Builder) const override;
244+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
245+
DiagnosticsEngine &Diags) const override;
246246
};
247247

248248
class LLVM_LIBRARY_VISIBILITY WindowsARMTargetInfo
@@ -267,8 +267,8 @@ class LLVM_LIBRARY_VISIBILITY ItaniumWindowsARMleTargetInfo
267267
ItaniumWindowsARMleTargetInfo(const llvm::Triple &Triple,
268268
const TargetOptions &Opts);
269269

270-
void getTargetDefines(const LangOptions &Opts,
271-
MacroBuilder &Builder) const override;
270+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
271+
DiagnosticsEngine &Diags) const override;
272272
};
273273

274274
// Windows ARM, MS (C++) ABI
@@ -278,26 +278,26 @@ class LLVM_LIBRARY_VISIBILITY MicrosoftARMleTargetInfo
278278
MicrosoftARMleTargetInfo(const llvm::Triple &Triple,
279279
const TargetOptions &Opts);
280280

281-
void getTargetDefines(const LangOptions &Opts,
282-
MacroBuilder &Builder) const override;
281+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
282+
DiagnosticsEngine &Diags) const override;
283283
};
284284

285285
// ARM MinGW target
286286
class LLVM_LIBRARY_VISIBILITY MinGWARMTargetInfo : public WindowsARMTargetInfo {
287287
public:
288288
MinGWARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
289289

290-
void getTargetDefines(const LangOptions &Opts,
291-
MacroBuilder &Builder) const override;
290+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
291+
DiagnosticsEngine &Diags) const override;
292292
};
293293

294294
// ARM Cygwin target
295295
class LLVM_LIBRARY_VISIBILITY CygwinARMTargetInfo : public ARMleTargetInfo {
296296
public:
297297
CygwinARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts);
298298

299-
void getTargetDefines(const LangOptions &Opts,
300-
MacroBuilder &Builder) const override;
299+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
300+
DiagnosticsEngine &Diags) const override;
301301
};
302302

303303
class LLVM_LIBRARY_VISIBILITY DarwinARMTargetInfo
@@ -317,8 +317,8 @@ class LLVM_LIBRARY_VISIBILITY RenderScript32TargetInfo
317317
RenderScript32TargetInfo(const llvm::Triple &Triple,
318318
const TargetOptions &Opts);
319319

320-
void getTargetDefines(const LangOptions &Opts,
321-
MacroBuilder &Builder) const override;
320+
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder,
321+
DiagnosticsEngine &Diags) const override;
322322
};
323323

324324
} // namespace targets

clang/lib/Basic/Targets/AVR.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,8 @@ AVRTargetInfo::handleAsmEscapedChar(char EscChar) const {
446446
}
447447

448448
void AVRTargetInfo::getTargetDefines(const LangOptions &Opts,
449-
MacroBuilder &Builder) const {
449+
MacroBuilder &Builder,
450+
DiagnosticsEngine &Diags) const {
450451
Builder.defineMacro("AVR");
451452
Builder.defineMacro("__AVR");
452453
Builder.defineMacro("__AVR__");

0 commit comments

Comments
 (0)