Skip to content

Commit 302fecc

Browse files
committed
fixup! Add tests and check for unsupported ABIs
1 parent 6c70342 commit 302fecc

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

clang/lib/Driver/ToolChains/Flang.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,15 +260,19 @@ void Flang::AddPPCTargetArgs(const ArgList &Args,
260260

261261
void Flang::AddRISCVTargetArgs(const ArgList &Args,
262262
ArgStringList &CmdArgs) const {
263+
const Driver &D = getToolChain().getDriver();
263264
const llvm::Triple &Triple = getToolChain().getTriple();
264265

265266
StringRef ABIName = riscv::getRISCVABI(Args, Triple);
266-
CmdArgs.push_back(Args.MakeArgString("-mabi=" + ABIName));
267+
if (ABIName == "lp64" || ABIName == "lp64f" || ABIName == "lp64d")
268+
CmdArgs.push_back(Args.MakeArgString("-mabi=" + ABIName));
269+
else
270+
D.Diag(diag::err_drv_unsupported_option_argument)
271+
<< "-mabi=" << ABIName;
267272

268273
// Handle -mrvv-vector-bits=<bits>
269274
if (Arg *A = Args.getLastArg(options::OPT_mrvv_vector_bits_EQ)) {
270275
StringRef Val = A->getValue();
271-
const Driver &D = getToolChain().getDriver();
272276

273277
// Get minimum VLen from march.
274278
unsigned MinVLen = 0;

flang/test/Driver/mabi-riscv.f90

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
! RUN: not %flang -c --target=riscv64-unknown-linux -mabi=ilp32 %s -### 2>&1 | FileCheck --check-prefix=INVALID1 %s
2+
! RUN: not %flang -c --target=riscv64-unknown-linux -mabi=lp64e %s -### 2>&1 | FileCheck --check-prefix=INVALID2 %s
3+
! RUN: %flang -c --target=riscv64-unknown-linux -mabi=lp64 %s -### 2>&1 | FileCheck --check-prefix=ABI1 %s
4+
! RUN: %flang -c --target=riscv64-unknown-linux -mabi=lp64f %s -### 2>&1 | FileCheck --check-prefix=ABI2 %s
5+
! RUN: %flang -c --target=riscv64-unknown-linux -mabi=lp64d %s -### 2>&1 | FileCheck --check-prefix=ABI3 %s
6+
! RUN: %flang -c --target=riscv64-unknown-linux %s -### 2>&1 | FileCheck --check-prefix=ABI3 %s
7+
8+
! INVALID1: error: unsupported argument 'ilp32' to option '-mabi='
9+
! INVALID2: error: unsupported argument 'lp64e' to option '-mabi='
10+
11+
! ABI1: "-mabi=lp64"
12+
! ABI2: "-mabi=lp64f"
13+
! ABI3: "-mabi=lp64d"
14+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
! REQUIRES: riscv-registered-target
2+
! RUN: %flang_fc1 -triple riscv64-none-linux-gnu -mabi=lp64 -emit-llvm -o - %s | FileCheck %s --check-prefix=LP64
3+
! RUN: %flang_fc1 -triple riscv64-none-linux-gnu -mabi=lp64f -emit-llvm -o - %s | FileCheck %s --check-prefix=LP64F
4+
! RUN: %flang_fc1 -triple riscv64-none-linux-gnu -mabi=lp64d -emit-llvm -o - %s | FileCheck %s --check-prefix=LP64D
5+
6+
! LP64: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64"}
7+
! LP64F: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64f"}
8+
! LP64D: !{{[0-9]+}} = !{i32 1, !"target-abi", !"lp64d"}
9+
subroutine func
10+
end subroutine func

0 commit comments

Comments
 (0)