[clang] [Clang][RISCV] Add preprocessor macros for Zicfilp CFI scheme (PR #109600)
Ming-Yi Lai via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 16 22:32:21 PST 2025
https://github.com/mylai-mtk updated https://github.com/llvm/llvm-project/pull/109600
>From 3bb0b659009ade3dcd04d7bbb88b57e7b072fac5 Mon Sep 17 00:00:00 2001
From: Ming-Yi Lai <ming-yi.lai at mediatek.com>
Date: Fri, 10 May 2024 14:16:59 +0800
Subject: [PATCH 1/5] [clang][RISCV] Add Zicfilp CFI scheme preprocessor macros
These macros allow assembly files to know which CFI label to use when the target
has Zicfilp enabled.
---
clang/lib/Basic/Targets/RISCV.cpp | 19 +++++
.../test/CodeGen/RISCV/riscv-cf-protection.c | 79 +++++++++++++++++++
2 files changed, 98 insertions(+)
diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp
index b4aa3206fcfab..f00fa6bf3904f 100644
--- a/clang/lib/Basic/Targets/RISCV.cpp
+++ b/clang/lib/Basic/Targets/RISCV.cpp
@@ -238,6 +238,25 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
else
Builder.defineMacro("__riscv_32e");
}
+
+ if (Opts.CFProtectionBranch) {
+ auto Scheme = Opts.getCFBranchLabelScheme();
+ if (Scheme == CFBranchLabelSchemeKind::Default)
+ Scheme = getDefaultCFBranchLabelScheme();
+
+ Builder.defineMacro("__riscv_landing_pad", "1");
+ switch (Scheme) {
+ case CFBranchLabelSchemeKind::Unlabeled:
+ Builder.defineMacro("__riscv_landing_pad_unlabeled", "1");
+ break;
+ case CFBranchLabelSchemeKind::FuncSig:
+ Builder.defineMacro("__riscv_landing_pad_func_sig", "1");
+ break;
+ case CFBranchLabelSchemeKind::Default:
+ llvm_unreachable("default cf-branch-label scheme should already be "
+ "transformed to other scheme");
+ }
+ }
}
static constexpr int NumRVVBuiltins =
diff --git a/clang/test/CodeGen/RISCV/riscv-cf-protection.c b/clang/test/CodeGen/RISCV/riscv-cf-protection.c
index 3a9855a3d2f01..db7b65061658c 100644
--- a/clang/test/CodeGen/RISCV/riscv-cf-protection.c
+++ b/clang/test/CodeGen/RISCV/riscv-cf-protection.c
@@ -1,71 +1,143 @@
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv32 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM -emit-llvm %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
// RUN: %clang --target=riscv32 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
+// RUN: %clang --target=riscv32 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
+// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv64 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
// RUN: %clang --target=riscv64 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
+// RUN: %clang --target=riscv64 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
+// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
+// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck \
+// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
+
// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
@@ -83,6 +155,13 @@
// FUNC-SIG-SCHEME-UNUSED: warning: argument unused during compilation:
// FUNC-SIG-SCHEME-UNUSED-SAME: '-mcf-branch-label-scheme=func-sig'
+// LPAD-MACRO: __riscv_landing_pad 1{{$}}
+// UNLABELED-MACRO: __riscv_landing_pad_unlabeled 1{{$}}
+// FUNC-SIG-MACRO: __riscv_landing_pad_func_sig 1{{$}}
+// NO-MACRO-NOT: __riscv_landing_pad
+// NO-MACRO-NOT: __riscv_landing_pad_unlabeled
+// NO-MACRO-NOT: __riscv_landing_pad_func_sig
+
// BRANCH-PROT-FLAG-DAG: [[P_FLAG:![0-9]+]] = !{i32 8, !"cf-protection-branch", i32 1}
// UNLABELED-FLAG-DAG: [[S_FLAG:![0-9]+]] = !{i32 1, !"cf-branch-label-scheme", !"unlabeled"}
// FUNC-SIG-FLAG-DAG: [[S_FLAG:![0-9]+]] = !{i32 1, !"cf-branch-label-scheme", !"func-sig"}
>From 8d278be0652c5861cabefb9b1e05c7dae6ca6ef4 Mon Sep 17 00:00:00 2001
From: Ming-Yi Lai <ming-yi.lai at mediatek.com>
Date: Mon, 17 Feb 2025 11:07:10 +0800
Subject: [PATCH 2/5] fixup: Remove redundant macro contents
---
clang/lib/Basic/Targets/RISCV.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Basic/Targets/RISCV.cpp b/clang/lib/Basic/Targets/RISCV.cpp
index f00fa6bf3904f..772be45223559 100644
--- a/clang/lib/Basic/Targets/RISCV.cpp
+++ b/clang/lib/Basic/Targets/RISCV.cpp
@@ -244,13 +244,13 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
if (Scheme == CFBranchLabelSchemeKind::Default)
Scheme = getDefaultCFBranchLabelScheme();
- Builder.defineMacro("__riscv_landing_pad", "1");
+ Builder.defineMacro("__riscv_landing_pad");
switch (Scheme) {
case CFBranchLabelSchemeKind::Unlabeled:
- Builder.defineMacro("__riscv_landing_pad_unlabeled", "1");
+ Builder.defineMacro("__riscv_landing_pad_unlabeled");
break;
case CFBranchLabelSchemeKind::FuncSig:
- Builder.defineMacro("__riscv_landing_pad_func_sig", "1");
+ Builder.defineMacro("__riscv_landing_pad_func_sig");
break;
case CFBranchLabelSchemeKind::Default:
llvm_unreachable("default cf-branch-label scheme should already be "
>From 87067be167bb5b35322fe341b6c0b05fdaf9f834 Mon Sep 17 00:00:00 2001
From: Ming-Yi Lai <ming-yi.lai at mediatek.com>
Date: Mon, 17 Feb 2025 12:02:08 +0800
Subject: [PATCH 3/5] fixup: Move tests of macros from CodeGen dir to
Preprocessor dir
---
.../test/CodeGen/RISCV/riscv-cf-protection.c | 79 -------------------
clang/test/Preprocessor/riscv-cf-protection.c | 72 +++++++++++++++++
2 files changed, 72 insertions(+), 79 deletions(-)
create mode 100644 clang/test/Preprocessor/riscv-cf-protection.c
diff --git a/clang/test/CodeGen/RISCV/riscv-cf-protection.c b/clang/test/CodeGen/RISCV/riscv-cf-protection.c
index db7b65061658c..3a9855a3d2f01 100644
--- a/clang/test/CodeGen/RISCV/riscv-cf-protection.c
+++ b/clang/test/CodeGen/RISCV/riscv-cf-protection.c
@@ -1,143 +1,71 @@
-// RUN: %clang --target=riscv32 -menable-experimental-extensions \
-// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
-
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
-// RUN: %clang --target=riscv32 -menable-experimental-extensions \
-// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
-
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
-// RUN: %clang --target=riscv32 -menable-experimental-extensions \
-// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv32 -menable-experimental-extensions \
-// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv32 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=unlabeled -E -dM -emit-llvm %s -o - | \
-// RUN: FileCheck --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
-
// RUN: %clang --target=riscv32 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
-// RUN: %clang --target=riscv32 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
-
// RUN: %clang --target=riscv32 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
-// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv64 -menable-experimental-extensions \
-// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
-
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
-// RUN: %clang --target=riscv64 -menable-experimental-extensions \
-// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
-
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
-// RUN: %clang --target=riscv64 -menable-experimental-extensions \
-// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv64 -menable-experimental-extensions \
-// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv64 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
-
// RUN: %clang --target=riscv64 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,UNLABELED-FLAG %s
-// RUN: %clang --target=riscv64 -fcf-protection=branch \
-// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
-// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
-
// RUN: %clang --target=riscv64 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=func-sig -S -emit-llvm %s -o - | FileCheck \
// RUN: --check-prefixes=BRANCH-PROT-FLAG,FUNC-SIG-FLAG %s
-// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,UNLABELED-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,UNLABELED-SCHEME-UNUSED %s
-// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=func-sig -E -dM %s \
-// RUN: -o - 2>&1 | FileCheck \
-// RUN: --check-prefixes=NO-MACRO,FUNC-SIG-SCHEME-UNUSED %s
-
// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=func-sig -S \
// RUN: -emit-llvm %s -o - 2>&1 | FileCheck \
// RUN: --check-prefixes=NO-FLAG,FUNC-SIG-SCHEME-UNUSED %s
@@ -155,13 +83,6 @@
// FUNC-SIG-SCHEME-UNUSED: warning: argument unused during compilation:
// FUNC-SIG-SCHEME-UNUSED-SAME: '-mcf-branch-label-scheme=func-sig'
-// LPAD-MACRO: __riscv_landing_pad 1{{$}}
-// UNLABELED-MACRO: __riscv_landing_pad_unlabeled 1{{$}}
-// FUNC-SIG-MACRO: __riscv_landing_pad_func_sig 1{{$}}
-// NO-MACRO-NOT: __riscv_landing_pad
-// NO-MACRO-NOT: __riscv_landing_pad_unlabeled
-// NO-MACRO-NOT: __riscv_landing_pad_func_sig
-
// BRANCH-PROT-FLAG-DAG: [[P_FLAG:![0-9]+]] = !{i32 8, !"cf-protection-branch", i32 1}
// UNLABELED-FLAG-DAG: [[S_FLAG:![0-9]+]] = !{i32 1, !"cf-branch-label-scheme", !"unlabeled"}
// FUNC-SIG-FLAG-DAG: [[S_FLAG:![0-9]+]] = !{i32 1, !"cf-branch-label-scheme", !"func-sig"}
diff --git a/clang/test/Preprocessor/riscv-cf-protection.c b/clang/test/Preprocessor/riscv-cf-protection.c
new file mode 100644
index 0000000000000..a632f9422721a
--- /dev/null
+++ b/clang/test/Preprocessor/riscv-cf-protection.c
@@ -0,0 +1,72 @@
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv32 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM -emit-llvm %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv32 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv64 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv64 -fcf-protection=branch \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=func-sig -E -dM %s \
+// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+
+// LPAD-MACRO: __riscv_landing_pad 1{{$}}
+// UNLABELED-MACRO: __riscv_landing_pad_unlabeled 1{{$}}
+// FUNC-SIG-MACRO: __riscv_landing_pad_func_sig 1{{$}}
+// NO-MACRO-NOT: __riscv_landing_pad
+// NO-MACRO-NOT: __riscv_landing_pad_unlabeled
+// NO-MACRO-NOT: __riscv_landing_pad_func_sig
+
+int main() { return 0; }
>From f3d2973edf3a88651874609c52aaf2f13c87973a Mon Sep 17 00:00:00 2001
From: Ming-Yi Lai <ming-yi.lai at mediatek.com>
Date: Mon, 17 Feb 2025 12:21:03 +0800
Subject: [PATCH 4/5] fixup: Add tests for default branch label scheme
---
clang/test/Preprocessor/riscv-cf-protection.c | 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/clang/test/Preprocessor/riscv-cf-protection.c b/clang/test/Preprocessor/riscv-cf-protection.c
index a632f9422721a..292b2b94b33e0 100644
--- a/clang/test/Preprocessor/riscv-cf-protection.c
+++ b/clang/test/Preprocessor/riscv-cf-protection.c
@@ -1,3 +1,7 @@
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
@@ -8,6 +12,10 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -E -dM %s -o - 2>&1 | \
+// RUN: FileCheck --check-prefixes=NO-MACRO %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
@@ -16,6 +24,9 @@
// RUN: -march=rv32i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+// RUN: %clang --target=riscv32 -fcf-protection=branch -E -dM -emit-llvm %s \
+// RUN: -o - | FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -E -dM -emit-llvm %s -o - | \
// RUN: FileCheck --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
@@ -24,12 +35,19 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv32 -E -dM %s -o - 2>&1 | \
+// RUN: FileCheck --check-prefixes=NO-MACRO %s
+
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=unlabeled -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
// RUN: %clang --target=riscv32 -mcf-branch-label-scheme=func-sig -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
@@ -40,6 +58,10 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -E -dM %s -o - 2>&1 | \
+// RUN: FileCheck --check-prefixes=NO-MACRO %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=unlabeled -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
@@ -48,6 +70,9 @@
// RUN: -march=rv64i_zicfilp1p0 -mcf-branch-label-scheme=func-sig -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
+// RUN: %clang --target=riscv64 -fcf-protection=branch -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -fcf-protection=branch \
// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
@@ -56,6 +81,9 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv64 -E -dM %s -o - 2>&1 | \
+// RUN: FileCheck --check-prefixes=NO-MACRO %s
+
// RUN: %clang --target=riscv64 -mcf-branch-label-scheme=unlabeled -E -dM %s \
// RUN: -o - 2>&1 | FileCheck --check-prefixes=NO-MACRO %s
>From d88836d8daf1225227884ca7b52d857a54a5cd41 Mon Sep 17 00:00:00 2001
From: Ming-Yi Lai <ming-yi.lai at mediatek.com>
Date: Mon, 17 Feb 2025 14:31:56 +0800
Subject: [PATCH 5/5] fixup: Add tests for `-fcf-protection=full`
---
clang/test/Preprocessor/riscv-cf-protection.c | 50 +++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/clang/test/Preprocessor/riscv-cf-protection.c b/clang/test/Preprocessor/riscv-cf-protection.c
index 292b2b94b33e0..eeeab7a3a09d6 100644
--- a/clang/test/Preprocessor/riscv-cf-protection.c
+++ b/clang/test/Preprocessor/riscv-cf-protection.c
@@ -12,6 +12,20 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=full -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv32 -menable-experimental-extensions \
+// RUN: -march=rv32i_zicfilp1p0 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -menable-experimental-extensions \
// RUN: -march=rv32i_zicfilp1p0 -E -dM %s -o - 2>&1 | \
// RUN: FileCheck --check-prefixes=NO-MACRO %s
@@ -35,6 +49,17 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv32 -fcf-protection=full -E -dM -emit-llvm %s \
+// RUN: -o - | FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv32 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM -emit-llvm %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv32 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv32 -E -dM %s -o - 2>&1 | \
// RUN: FileCheck --check-prefixes=NO-MACRO %s
@@ -58,6 +83,20 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=full -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv64 -menable-experimental-extensions \
+// RUN: -march=rv64i_zicfilp1p0 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -menable-experimental-extensions \
// RUN: -march=rv64i_zicfilp1p0 -E -dM %s -o - 2>&1 | \
// RUN: FileCheck --check-prefixes=NO-MACRO %s
@@ -81,6 +120,17 @@
// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+// RUN: %clang --target=riscv64 -fcf-protection=full -E -dM %s -o - | \
+// RUN: FileCheck --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
+// RUN: %clang --target=riscv64 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=unlabeled -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,UNLABELED-MACRO %s
+
+// RUN: %clang --target=riscv64 -fcf-protection=full \
+// RUN: -mcf-branch-label-scheme=func-sig -E -dM %s -o - | FileCheck \
+// RUN: --check-prefixes=LPAD-MACRO,FUNC-SIG-MACRO %s
+
// RUN: %clang --target=riscv64 -E -dM %s -o - 2>&1 | \
// RUN: FileCheck --check-prefixes=NO-MACRO %s
More information about the cfe-commits
mailing list