Skip to content

Commit c4de0f5

Browse files
committed
[PAC][clang] Handle pauthtest environment and ABI in Linux-specific code
Since pauthtest is a Linux-specific ABI, it should not be handled in common driver code.
1 parent 7abf7b7 commit c4de0f5

File tree

13 files changed

+150
-102
lines changed

13 files changed

+150
-102
lines changed

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,7 @@ AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
206206
StringRef AArch64TargetInfo::getABI() const { return ABI; }
207207

208208
bool AArch64TargetInfo::setABI(const std::string &Name) {
209-
if (Name != "aapcs" && Name != "aapcs-soft" && Name != "darwinpcs" &&
210-
Name != "pauthtest")
209+
if (Name != "aapcs" && Name != "aapcs-soft" && Name != "darwinpcs")
211210
return false;
212211

213212
ABI = Name;
@@ -221,12 +220,6 @@ bool AArch64TargetInfo::validateTarget(DiagnosticsEngine &Diags) const {
221220
Diags.Report(diag::err_target_unsupported_abi_with_fpu) << ABI;
222221
return false;
223222
}
224-
if (getTriple().getEnvironment() == llvm::Triple::PAuthTest &&
225-
getTriple().getOS() != llvm::Triple::Linux) {
226-
Diags.Report(diag::err_target_unsupported_abi_for_triple)
227-
<< getTriple().getEnvironmentName() << getTriple().getTriple();
228-
return false;
229-
}
230223
return true;
231224
}
232225

clang/lib/Basic/Targets/AArch64.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ class LLVM_LIBRARY_VISIBILITY AArch64TargetInfo : public TargetInfo {
121121

122122
const llvm::AArch64::ArchInfo *ArchInfo = &llvm::AArch64::ARMV8A;
123123

124+
protected:
124125
std::string ABI;
125126

126127
public:
@@ -259,6 +260,16 @@ class LLVM_LIBRARY_VISIBILITY AArch64leTargetInfo : public AArch64TargetInfo {
259260
void setDataLayout() override;
260261
};
261262

263+
template <>
264+
inline bool
265+
LinuxTargetInfo<AArch64leTargetInfo>::setABI(const std::string &Name) {
266+
if (Name == "pauthtest") {
267+
ABI = Name;
268+
return true;
269+
}
270+
return AArch64leTargetInfo::setABI(Name);
271+
}
272+
262273
class LLVM_LIBRARY_VISIBILITY WindowsARM64TargetInfo
263274
: public WindowsTargetInfo<AArch64leTargetInfo> {
264275
const llvm::Triple Triple;

clang/lib/Basic/Targets/OSTargets.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
//===----------------------------------------------------------------------===//
1111

1212
#include "OSTargets.h"
13+
#include "AArch64.h"
1314
#include "clang/Basic/MacroBuilder.h"
1415
#include "llvm/ADT/StringRef.h"
1516

clang/lib/Basic/Targets/OSTargets.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,12 @@ class LLVM_LIBRARY_VISIBILITY LinuxTargetInfo : public OSTargetInfo<Target> {
371371
const char *getStaticInitSectionSpecifier() const override {
372372
return ".text.startup";
373373
}
374+
375+
// This allows template specializations, see
376+
// LinuxTargetInfo<AArch64leTargetInfo>::setABI
377+
bool setABI(const std::string &Name) override {
378+
return OSTargetInfo<Target>::setABI(Name);
379+
}
374380
};
375381

376382
// NetBSD Target

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,6 @@ createTargetCodeGenInfo(CodeGenModule &CGM) {
144144
return createWindowsAArch64TargetCodeGenInfo(CGM, AArch64ABIKind::Win64);
145145
else if (Target.getABI() == "aapcs-soft")
146146
Kind = AArch64ABIKind::AAPCSSoft;
147-
else if (Target.getABI() == "pauthtest")
148-
Kind = AArch64ABIKind::PAuthTest;
149147

150148
return createAArch64TargetCodeGenInfo(CGM, Kind);
151149
}

clang/lib/CodeGen/TargetInfo.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@ enum class AArch64ABIKind {
451451
DarwinPCS,
452452
Win64,
453453
AAPCSSoft,
454-
PAuthTest,
455454
};
456455

457456
std::unique_ptr<TargetCodeGenInfo>

clang/lib/Driver/ToolChain.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,6 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args,
11101110
}
11111111
case llvm::Triple::aarch64: {
11121112
llvm::Triple Triple = getTriple();
1113-
tools::aarch64::setPAuthABIInTriple(getDriver(), Args, Triple);
11141113
if (!Triple.isOSBinFormatMachO())
11151114
return Triple.getTriple();
11161115

clang/lib/Driver/ToolChains/Arch/AArch64.cpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -455,24 +455,3 @@ void aarch64::getAArch64TargetFeatures(const Driver &D,
455455
if (Args.getLastArg(options::OPT_mno_bti_at_return_twice))
456456
Features.push_back("+no-bti-at-return-twice");
457457
}
458-
459-
void aarch64::setPAuthABIInTriple(const Driver &D, const ArgList &Args,
460-
llvm::Triple &Triple) {
461-
Arg *ABIArg = Args.getLastArg(options::OPT_mabi_EQ);
462-
bool HasPAuthABI =
463-
ABIArg ? (StringRef(ABIArg->getValue()) == "pauthtest") : false;
464-
465-
switch (Triple.getEnvironment()) {
466-
case llvm::Triple::UnknownEnvironment:
467-
if (HasPAuthABI)
468-
Triple.setEnvironment(llvm::Triple::PAuthTest);
469-
break;
470-
case llvm::Triple::PAuthTest:
471-
break;
472-
default:
473-
if (HasPAuthABI)
474-
D.Diag(diag::err_drv_unsupported_opt_for_target)
475-
<< ABIArg->getAsString(Args) << Triple.getTriple();
476-
break;
477-
}
478-
}

clang/lib/Driver/ToolChains/Arch/AArch64.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple,
2828
std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args,
2929
const llvm::Triple &Triple, llvm::opt::Arg *&A);
3030

31-
void setPAuthABIInTriple(const Driver &D, const llvm::opt::ArgList &Args,
32-
llvm::Triple &triple);
33-
3431
} // end namespace aarch64
3532
} // end namespace target
3633
} // end namespace driver

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 3 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,59 +1500,6 @@ void AddUnalignedAccessWarning(ArgStringList &CmdArgs) {
15001500
}
15011501
}
15021502

1503-
// Each combination of options here forms a signing schema, and in most cases
1504-
// each signing schema is its own incompatible ABI. The default values of the
1505-
// options represent the default signing schema.
1506-
static void handlePAuthABI(const ArgList &DriverArgs, ArgStringList &CC1Args) {
1507-
if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics,
1508-
options::OPT_fno_ptrauth_intrinsics))
1509-
CC1Args.push_back("-fptrauth-intrinsics");
1510-
1511-
if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
1512-
options::OPT_fno_ptrauth_calls))
1513-
CC1Args.push_back("-fptrauth-calls");
1514-
1515-
if (!DriverArgs.hasArg(options::OPT_fptrauth_returns,
1516-
options::OPT_fno_ptrauth_returns))
1517-
CC1Args.push_back("-fptrauth-returns");
1518-
1519-
if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
1520-
options::OPT_fno_ptrauth_auth_traps))
1521-
CC1Args.push_back("-fptrauth-auth-traps");
1522-
1523-
if (!DriverArgs.hasArg(
1524-
options::OPT_fptrauth_vtable_pointer_address_discrimination,
1525-
options::OPT_fno_ptrauth_vtable_pointer_address_discrimination))
1526-
CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
1527-
1528-
if (!DriverArgs.hasArg(
1529-
options::OPT_fptrauth_vtable_pointer_type_discrimination,
1530-
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
1531-
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
1532-
1533-
if (!DriverArgs.hasArg(
1534-
options::OPT_fptrauth_type_info_vtable_pointer_discrimination,
1535-
options::OPT_fno_ptrauth_type_info_vtable_pointer_discrimination))
1536-
CC1Args.push_back("-fptrauth-type-info-vtable-pointer-discrimination");
1537-
1538-
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
1539-
options::OPT_fno_ptrauth_indirect_gotos))
1540-
CC1Args.push_back("-fptrauth-indirect-gotos");
1541-
1542-
if (!DriverArgs.hasArg(options::OPT_fptrauth_init_fini,
1543-
options::OPT_fno_ptrauth_init_fini))
1544-
CC1Args.push_back("-fptrauth-init-fini");
1545-
1546-
if (!DriverArgs.hasArg(
1547-
options::OPT_fptrauth_init_fini_address_discrimination,
1548-
options::OPT_fno_ptrauth_init_fini_address_discrimination))
1549-
CC1Args.push_back("-fptrauth-init-fini-address-discrimination");
1550-
1551-
if (!DriverArgs.hasArg(options::OPT_faarch64_jump_table_hardening,
1552-
options::OPT_fno_aarch64_jump_table_hardening))
1553-
CC1Args.push_back("-faarch64-jump-table-hardening");
1554-
}
1555-
15561503
static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
15571504
ArgStringList &CmdArgs, bool isAArch64) {
15581505
const Arg *A = isAArch64
@@ -1782,7 +1729,9 @@ void RenderAArch64ABI(const llvm::Triple &Triple, const ArgList &Args,
17821729
ABIName = A->getValue();
17831730
else if (Triple.isOSDarwin())
17841731
ABIName = "darwinpcs";
1785-
else if (Triple.getEnvironment() == llvm::Triple::PAuthTest)
1732+
// TODO: we probably want to have some target hook here.
1733+
else if (Triple.isOSLinux() &&
1734+
Triple.getEnvironment() == llvm::Triple::PAuthTest)
17861735
ABIName = "pauthtest";
17871736
else
17881737
ABIName = "aapcs";
@@ -1820,9 +1769,6 @@ void Clang::AddAArch64TargetArgs(const ArgList &Args,
18201769
// Enable/disable return address signing and indirect branch targets.
18211770
CollectARMPACBTIOptions(getToolChain(), Args, CmdArgs, true /*isAArch64*/);
18221771

1823-
if (Triple.getEnvironment() == llvm::Triple::PAuthTest)
1824-
handlePAuthABI(Args, CmdArgs);
1825-
18261772
// Handle -msve_vector_bits=<bits>
18271773
if (Arg *A = Args.getLastArg(options::OPT_msve_vector_bits_EQ)) {
18281774
StringRef Val = A->getValue();

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,102 @@ std::string Linux::computeSysRoot() const {
438438
return std::string();
439439
}
440440

441+
static void setPAuthABIInTriple(const Driver &D, const ArgList &Args,
442+
llvm::Triple &Triple) {
443+
Arg *ABIArg = Args.getLastArg(options::OPT_mabi_EQ);
444+
bool HasPAuthABI =
445+
ABIArg ? (StringRef(ABIArg->getValue()) == "pauthtest") : false;
446+
447+
switch (Triple.getEnvironment()) {
448+
case llvm::Triple::UnknownEnvironment:
449+
if (HasPAuthABI)
450+
Triple.setEnvironment(llvm::Triple::PAuthTest);
451+
break;
452+
case llvm::Triple::PAuthTest:
453+
break;
454+
default:
455+
if (HasPAuthABI)
456+
D.Diag(diag::err_drv_unsupported_opt_for_target)
457+
<< ABIArg->getAsString(Args) << Triple.getTriple();
458+
break;
459+
}
460+
}
461+
462+
std::string Linux::ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
463+
types::ID InputType) const {
464+
std::string TripleString =
465+
Generic_ELF::ComputeEffectiveClangTriple(Args, InputType);
466+
if (getTriple().isAArch64()) {
467+
llvm::Triple Triple(TripleString);
468+
setPAuthABIInTriple(getDriver(), Args, Triple);
469+
return Triple.getTriple();
470+
}
471+
return TripleString;
472+
}
473+
474+
// Each combination of options here forms a signing schema, and in most cases
475+
// each signing schema is its own incompatible ABI. The default values of the
476+
// options represent the default signing schema.
477+
static void handlePAuthABI(const Driver &D, const ArgList &DriverArgs,
478+
ArgStringList &CC1Args) {
479+
if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics,
480+
options::OPT_fno_ptrauth_intrinsics))
481+
CC1Args.push_back("-fptrauth-intrinsics");
482+
483+
if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
484+
options::OPT_fno_ptrauth_calls))
485+
CC1Args.push_back("-fptrauth-calls");
486+
487+
if (!DriverArgs.hasArg(options::OPT_fptrauth_returns,
488+
options::OPT_fno_ptrauth_returns))
489+
CC1Args.push_back("-fptrauth-returns");
490+
491+
if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
492+
options::OPT_fno_ptrauth_auth_traps))
493+
CC1Args.push_back("-fptrauth-auth-traps");
494+
495+
if (!DriverArgs.hasArg(
496+
options::OPT_fptrauth_vtable_pointer_address_discrimination,
497+
options::OPT_fno_ptrauth_vtable_pointer_address_discrimination))
498+
CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
499+
500+
if (!DriverArgs.hasArg(
501+
options::OPT_fptrauth_vtable_pointer_type_discrimination,
502+
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
503+
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
504+
505+
if (!DriverArgs.hasArg(
506+
options::OPT_fptrauth_type_info_vtable_pointer_discrimination,
507+
options::OPT_fno_ptrauth_type_info_vtable_pointer_discrimination))
508+
CC1Args.push_back("-fptrauth-type-info-vtable-pointer-discrimination");
509+
510+
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
511+
options::OPT_fno_ptrauth_indirect_gotos))
512+
CC1Args.push_back("-fptrauth-indirect-gotos");
513+
514+
if (!DriverArgs.hasArg(options::OPT_fptrauth_init_fini,
515+
options::OPT_fno_ptrauth_init_fini))
516+
CC1Args.push_back("-fptrauth-init-fini");
517+
518+
if (!DriverArgs.hasArg(
519+
options::OPT_fptrauth_init_fini_address_discrimination,
520+
options::OPT_fno_ptrauth_init_fini_address_discrimination))
521+
CC1Args.push_back("-fptrauth-init-fini-address-discrimination");
522+
523+
if (!DriverArgs.hasArg(options::OPT_faarch64_jump_table_hardening,
524+
options::OPT_fno_aarch64_jump_table_hardening))
525+
CC1Args.push_back("-faarch64-jump-table-hardening");
526+
}
527+
528+
void Linux::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
529+
llvm::opt::ArgStringList &CC1Args,
530+
Action::OffloadKind DeviceOffloadKind) const {
531+
llvm::Triple Triple(ComputeEffectiveClangTriple(DriverArgs));
532+
if (Triple.isAArch64() && Triple.getEnvironment() == llvm::Triple::PAuthTest)
533+
handlePAuthABI(getDriver(), DriverArgs, CC1Args);
534+
Generic_ELF::addClangTargetOptions(DriverArgs, CC1Args, DeviceOffloadKind);
535+
}
536+
441537
std::string Linux::getDynamicLinker(const ArgList &Args) const {
442538
const llvm::Triple::ArchType Arch = getArch();
443539
const llvm::Triple &Triple = getTriple();

clang/lib/Driver/ToolChains/Linux.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
5151
SanitizerMask getSupportedSanitizers() const override;
5252
void addProfileRTLibs(const llvm::opt::ArgList &Args,
5353
llvm::opt::ArgStringList &CmdArgs) const override;
54+
std::string ComputeEffectiveClangTriple(
55+
const llvm::opt::ArgList &Args,
56+
types::ID InputType = types::TY_INVALID) const override;
5457
std::string computeSysRoot() const override;
58+
void
59+
addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
60+
llvm::opt::ArgStringList &CC1Args,
61+
Action::OffloadKind DeviceOffloadKind) const override;
5562

5663
std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override;
5764

clang/test/Driver/aarch64-ptrauth.c

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,39 @@
2222
// RUN: %clang -### -c --target=aarch64-linux -mabi=pauthtest %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI1
2323
// RUN: %clang -### -c --target=aarch64-linux-pauthtest %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI1
2424
// PAUTHABI1: "-cc1"{{.*}} "-triple" "aarch64-unknown-linux-pauthtest"
25-
// PAUTHABI1-SAME: "-target-abi" "pauthtest"
2625
// PAUTHABI1-SAME: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-type-info-vtable-pointer-discrimination" "-fptrauth-indirect-gotos" "-fptrauth-init-fini" "-fptrauth-init-fini-address-discrimination" "-faarch64-jump-table-hardening"
26+
// PAUTHABI1-SAME: "-target-abi" "pauthtest"
27+
// PAUTHABI1-NOT: "-fptrauth-function-pointer-type-discrimination"
2728

28-
// RUN: %clang -### -c --target=aarch64 -mabi=pauthtest -fno-ptrauth-intrinsics \
29+
// RUN: %clang -### -c --target=aarch64-linux -mabi=pauthtest -fno-ptrauth-intrinsics \
2930
// RUN: -fno-ptrauth-calls -fno-ptrauth-returns -fno-ptrauth-auth-traps \
3031
// RUN: -fno-ptrauth-vtable-pointer-address-discrimination -fno-ptrauth-vtable-pointer-type-discrimination \
3132
// RUN: -fno-ptrauth-type-info-vtable-pointer-discrimination -fno-ptrauth-indirect-gotos \
3233
// RUN: -fno-ptrauth-init-fini -fno-ptrauth-init-fini-address-discrimination \
3334
// RUN: -fno-aarch64-jump-table-hardening %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
34-
// RUN: %clang -### -c --target=aarch64-pauthtest -fno-ptrauth-intrinsics \
35+
// RUN: %clang -### -c --target=aarch64-linux-pauthtest -fno-ptrauth-intrinsics \
3536
// RUN: -fno-ptrauth-calls -fno-ptrauth-returns -fno-ptrauth-auth-traps \
3637
// RUN: -fno-ptrauth-vtable-pointer-address-discrimination -fno-ptrauth-vtable-pointer-type-discrimination \
3738
// RUN: -fno-ptrauth-type-info-vtable-pointer-discrimination -fno-ptrauth-indirect-gotos \
3839
// RUN: -fno-ptrauth-init-fini -fno-ptrauth-init-fini-address-discrimination \
3940
// RUN: -fno-aarch64-jump-table-hardening %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
40-
// PAUTHABI2: "-cc1"
41-
// PAUTHABI2-NOT: "-fptrauth-
41+
42+
//// Non-linux OS: pauthtest ABI has no effect in terms of passing ptrauth cc1 flags.
43+
//// An error about unsupported ABI will be emitted later in pipeline (see ERR2 below)
44+
// RUN: %clang -### -c --target=aarch64 -mabi=pauthtest %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
45+
46+
// PAUTHABI2: "-cc1"
47+
// PAUTHABI2-SAME: "-target-abi" "pauthtest"
48+
// PAUTHABI2-NOT: "-fptrauth-
4249
// PAUTHABI2-NOT: "-faarch64-jump-table-hardening"
4350

51+
//// Non-linux OS: pauthtest environment does not correspond to pauthtest ABI; aapcs is the default.
52+
// RUN: %clang -### -c --target=aarch64-pauthtest %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI3
53+
// PAUTHABI3: "-cc1"
54+
// PAUTHABI3-SAME: "-target-abi" "aapcs"
55+
// PAUTHABI3-NOT: "-fptrauth-
56+
// PAUTHABI3-NOT: "-faarch64-jump-table-hardening"
57+
4458
// RUN: not %clang -### -c --target=x86_64 -fptrauth-intrinsics -fptrauth-calls -fptrauth-returns -fptrauth-auth-traps \
4559
// RUN: -fptrauth-vtable-pointer-address-discrimination -fptrauth-vtable-pointer-type-discrimination \
4660
// RUN: -fptrauth-type-info-vtable-pointer-discrimination -fptrauth-indirect-gotos -fptrauth-init-fini \
@@ -57,10 +71,12 @@
5771
// ERR1-NEXT: error: unsupported option '-fptrauth-init-fini-address-discrimination' for target '{{.*}}'
5872
// ERR1-NEXT: error: unsupported option '-faarch64-jump-table-hardening' for target '{{.*}}'
5973

60-
//// Only support PAuth ABI for Linux as for now.
61-
// RUN: not %clang -o /dev/null -c --target=aarch64-unknown -mabi=pauthtest %s 2>&1 | FileCheck %s --check-prefix=ERR2
62-
// RUN: not %clang -o /dev/null -c --target=aarch64-unknown-pauthtest %s 2>&1 | FileCheck %s --check-prefix=ERR2
63-
// ERR2: error: ABI 'pauthtest' is not supported for 'aarch64-unknown-unknown-pauthtest'
74+
75+
// RUN: not %clang -c --target=aarch64 -mabi=pauthtest %s 2>&1 | FileCheck %s --check-prefix=ERR2
76+
//// The ABI is not specified explicitly, and for non-Linux pauthtest environment does not correspond
77+
//// to pauthtest ABI (each OS target defines this behavior separately). Do not emit an error.
78+
// RUN: %clang -c --target=aarch64-pauthtest %s -o /dev/null
79+
// ERR2: error: unknown target ABI 'pauthtest'
6480

6581
//// PAuth ABI is encoded as environment part of the triple, so don't allow to explicitly set other environments.
6682
// RUN: not %clang -### -c --target=aarch64-linux-gnu -mabi=pauthtest %s 2>&1 | FileCheck %s --check-prefix=ERR3

0 commit comments

Comments
 (0)