英语法语西班牙语

Ad


OnWorks 网站图标

FileCheck-3.6 - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 FileCheck-3.6

这是 FileCheck-3.6 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


FileCheck - 灵活的模式匹配文件验证器

概要


文件检查 匹配文件名 [--检查前缀=XXX[--严格空白]

商品描述


文件检查 读取两个文件(一个来自标准输入,一个在命令行中指定)
并使用一个来验证另一个。 这种行为对测试套件特别有用,
想要验证某些工具的输出(例如 有限责任公司) 包含预期
信息(例如,来自 esp 的 movsd 或任何有趣的东西)。 这是相似的
使用 grep的,但它被优化用于在一个文件中匹配多个不同的输入
具体顺序。

匹配文件名 file 指定包含要匹配的模式的文件。 文件
要验证是从标准输入读取的,除非 - 输入文件 选项被使用。

配置


-救命 打印命令行选项的摘要。

--检查前缀 字首
FileCheck 搜索的内容 匹配文件名 用于匹配的模式。 经过
默认情况下,这些模式以“校验:"。如果你想使用
不同的前缀(例如,因为同一个输入文件正在检查多个不同的
工具或选项), --检查前缀 参数允许您指定一个或多个
要匹配的前缀。 多个前缀对于可能改变的测试很有用
不同的运行选项,但大多数行保持不变。

- 输入文件 文件名
要检查的文件(默认为标准输入)。

--严格空白
默认情况下,FileCheck 规范化输入水平空白(空格和制表符)
这导致它忽略这些差异(空格将匹配制表符)。 这
--严格空白 参数禁用此行为。 行尾序列是
规范化为 UNIX 风格 \n 在所有模式中。

--隐式检查不 检查模式
在肯定检查之间为指定模式添加隐式否定检查。
该选项允许编写更严格的测试,而无需填充它们 检查不s.

例如, ”--隐式检查不 警告:" 在测试诊断时很有用
来自没有类似选项的工具的消息 -核实. 有了这个
选项 FileCheck 将验证输入不包含未涵盖的警告
任何 校验: 图案。

-版
显示这个程序的版本号。

退出 状态


If 文件检查 验证文件是否与预期内容匹配,它以 0 退出。
否则,如果没有,或者发生错误,它将以非零值退出。

在线课程


FileCheck 通常用于 LLVM 回归测试,在 RUN 行调用
考试。 从 RUN 行使用 FileCheck 的简单示例如下所示:

; 运行:llvm-as < %s | 有限责任公司-march=x86-64 | 文件检查 %s

此语法表示通过管道传输当前文件 ("%s“) 进入 LLVM-AS, 管道进入 有限责任公司, 然后
管道输出 有限责任公司文件检查. 这意味着 FileCheck 将验证其
标准输入(llc 输出)针对指定的文件名参数(原始 。二
由“指定的文件%s”)。要了解它是如何工作的,让我们看看其余部分 。二 文件
(在 RUN 行之后):

定义无效@sub1(i32* %p, i32 %v) {
入口:
; 检查:子1:
; 检查:subl
%0 = 尾调用 i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
返回无效
}

定义无效@inc4(i64* %p) {
入口:
; 检查:inc4:
; 检查:incq
%0 = 尾调用 i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
返回无效
}

在这里你可以看到一些“校验:" 在注释中指定的行。现在您可以看到文件如何
被输送到 LLVM-AS, 然后 有限责任公司,机器码输出就是我们要验证的。
FileCheck 检查机器代码输出以验证它是否与“校验:" 行
指定。

“的语法校验:" 行非常简单:它们是固定字符串,必须出现在
命令。 FileCheck 默认忽略水平空白差异(例如空格是
允许匹配选项卡),否则,“校验:" 行是必需的
完全匹配测试文件中的某些内容。

FileCheck 的一个好处(与 grep 相比)是它允许合并测试用例
一起组成逻辑组。 例如,因为上面的测试正在检查
"子1:“和”公司4:" 标签,除非有 ",否则不会匹配“在这两者之间
标签。 如果它存在于文件中的其他地方,则不算:"grep的 "
匹配如果“" 存在于文件中的任何位置。

文件检查 -检查前缀 选项
文件检查 -检查前缀 选项允许驱动多个测试配置
一种 。二 文件。 这在许多情况下都很有用,例如,测试不同的
建筑变体 有限责任公司. 这是一个简单的例子:

; 运行:llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
; 运行: | 文件检查 %s -check-prefix=X32
; 运行:llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
; 运行: | 文件检查 %s -check-prefix=X64

定义 <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
%tmp1 = 插入元素 <4 x i32>; %tmp, i32 %s, i32 1
ret <4 x i32> %tmp1
; X32:pinrd_1:
; X32: pinrd $1, 4(%esp), %xmm0

; X64:pinrd_1:
; X64: pinrd $1, %edi, %xmm0
}

在这种情况下,我们正在测试我们使用 32 位和
64 位代码生成。

检查-下一步: 指示
有时您想匹配行并想验证匹配是否准确发生
连续的行,中间没有其他行。 在这种情况下,您可以使用“校验:"
和“检查-下一步:" 指令来指定这一点。如果您指定了自定义检查前缀,
只需使用“-下一个:”。例如,像这样的事情正如你所期望的那样工作:

定义 void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
%tmp3 = 加载 <2 x double>* %A,对齐 16
%tmp7 = insertelement <2 x double> undef, double %B, i32 0
%tmp9 = shufflevector <2 x double> %tmp3,
<2 x 双倍> %tmp7,
<2 x i32> < i32 0, i32 2 >
store <2 x double> %tmp9, <2 x double>* %r, align 16
返回无效

; 检查:t2:
; 检查: movl 8(%esp), %eax
; 检查-下一步:movapd (%eax), %xmm0
; 检查-下一步:movhpd 12(%esp), %xmm0
; 检查-下一步: movl 4(%esp), %eax
; 检查-下一步:movapd %xmm0, (%eax)
; 检查-下一个: ret
}

"检查-下一步:" 指令拒绝输入,除非它之间正好有一个换行符
和之前的指令。 一种 ”检查-下一步:" 不能是文件中的第一个指令。

检查不: 指示
该“检查不:" 指令用于验证字符串不会出现在两个
匹配(或第一场比赛之前,或最后一场比赛之后)。 例如,要验证
通过转换移除负载,可以使用这样的测试:

定义 i8 @coerce_offset0(i32 %V, i32* %P) {
存储 i32 %V, i32* %P

%P2 = bitcast i32* %P 到 i8*
%P3 = getelementptr i8* %P2, i32 2

%A = 加载 i8* %P3
返回 i8 %A
; 检查:@coerce_offset0
; CHECK-NOT:加载
; 检查:ret i8
}

检查 DAG: 指示
如果需要匹配不是严格按顺序出现的字符串,
"检查 DAG:" 可用于在两次匹配之间(或在第一次匹配之前,
或在最后一场比赛之后)。 例如,clang 以相反的顺序发出 vtable 全局变量。 使用
检查 DAG:,我们可以按自然顺序进行检查:

// 运行:%clang_cc1 %s -emit-llvm -o - | 文件检查 %s

struct Foo { 虚空方法(); };
福 f; // 发出虚表
// 检查-DAG:@_ZTV3Foo =

struct Bar { 虚空方法(); };
酒吧 b;
// 检查-DAG:@_ZTV3Bar =

检查不: 指令可以与 检查 DAG: 排除字符串之间的指令
周围的 检查 DAG: 指令。 结果,周围 检查 DAG: 指令
不能重新排序,即所有匹配项 检查 DAG: before 检查不: 不得
落后于出现匹配 检查 DAG: after 检查不:。 例如,

; 检查 DAG:之前
; 不检查:不
; 检查 DAG:之后

这种情况将拒绝输入字符串,其中 之前 发生在 .

使用捕获的变量, 检查 DAG: 能够匹配 DAG 的有效拓扑排序
从变量的定义到其使用的边缘。 这很有用,例如,当您
测试用例需要匹配来自指令调度器的不同输出序列。 为了
例,

; CHECK-DAG:添加 [[REG1:r[0-9]+]], r1, r2
; CHECK-DAG:添加 [[REG2:r[0-9]+]], r3, r4
; 检查:mul r5, [[REG1]], [[REG2]]

在这种情况下,这两个的任何顺序 指令将被允许。

如果你定义 在同一个变量中使用 检查 DAG: 块,请注意
定义规则可以匹配 after 它的使用。

因此,例如,下面的代码将通过:

; 检查 DAG:vmov.32 [[REG2:d[0-9]+]][0]
; 检查 DAG:vmov.32 [[REG2]][1]
vmov.32 d0[1]
vmov.32 d0[0]

而这个其他代码,不会:

; 检查 DAG:vmov.32 [[REG2:d[0-9]+]][0]
; 检查 DAG:vmov.32 [[REG2]][1]
vmov.32 d1[1]
vmov.32 d0[0]

虽然这非常有用,但它也很危险,因为在 register 的情况下
顺序,你必须有一个强顺序(先读后写,复制前使用等)。 如果
您的测试正在寻找的定义不匹配(由于编译器中的错误),它
可能会在离使用更远的地方匹配,并掩盖真正的错误。

在这些情况下,要强制执行顺序,请在 DAG 块之间使用非 DAG 指令。

检查标签: 指示
有时在一个包含多个测试的文件中,这些测试被分成多个逻辑块,一个或多个
校验: 指令可能会通过匹配后面块中的行而无意中成功。 虽然一个
通常最终会生成错误,标记为导致错误的检查可能不会
实际上与问题的实际根源有任何关系。

为了在这些情况下产生更好的错误消息,“检查标签:" 指令可以
使用。 它被视为与正常相同 查看 指令除了 FileCheck 使
一个额外的假设是指令匹配的行也不能被匹配
存在的任何其他支票 匹配文件名; 这旨在用于线路
包含标签或其他唯一标识符。 从概念上讲,存在 检查标签
将输入流分成单独的块,每个块独立处理,
防止一个 校验: 一个块中的指令匹配另一块中的一行。 例如,

定义 %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
入口:
; 检查标签:C_ctor_base:
; 检查: mov [[SAVETHIS:r[0-9]+]], r0
; 检查:bl A_ctor_base
; 检查: mov r0, [[SAVETHIS]]
%0 = bitcast %struct.C* %this 到 %struct.A*
%call = 尾调用 %struct.A* @A_ctor_base(%struct.A* %0)
%1 = bitcast %struct.C* %this 到 %struct.B*
%call2 = 尾调用 %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
返回 %struct.C* %this
}

定义 %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
入口:
; 检查标签:D_ctor_base:

指某东西的用途 检查标签: 在这种情况下,指令确保三个 校验: 指令
只接受对应于正文的行 @C_ctor_base 函数,即使
模式匹配文件中稍后找到的行。 此外,如果这三个中的一个 校验:
指令失败,FileCheck 将通过继续下一个块来恢复,允许多个
要在单个调用中检测到的测试失败。

没有要求 检查标签: 指令包含对应于的字符串
源语言或输出语言中的实际句法标签:它们必须唯一地匹配一个
正在验证的文件中的单行。

检查标签: 指令不能包含变量定义或用途。

文件检查 模式 匹配 句法
该“校验:“和”检查不:" 指令都需要一个模式来匹配。对于大多数使用
FileCheck,固定字符串匹配完全足够。 对于某些事情,更
需要灵活的匹配形式。 为了支持这一点,FileCheck 允许您指定
匹配字符串中的正则表达式,用双大括号括起来: {{yourregex}}.
因为我们想对我们所做的大部分工作使用固定字符串匹配,所以 FileCheck 有
旨在支持混合和匹配固定字符串匹配与常规
表达式。 这允许你写这样的东西:

; 检查:movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}

在这种情况下,ESP 寄存器的任何偏移都将被允许,任何 xmm 寄存器都将被允许
被)允许。

因为正则表达式用双大括号括起来,所以它们在视觉上是不同的,
并且您不需要像在 C 中那样在双大括号中使用转义字符。
在极少数情况下,您想从输入中显式匹配双大括号,您可以
使用丑陋的东西 {{[{][{]}} 作为你的模式。

文件检查 变量
匹配一个模式然后验证它是否在稍后再次出现通常很有用
文件。 对于代码生成测试,这对于允许任何注册很有用,但要验证
register 以后一直使用。 去做这个, 文件检查 允许命名变量
定义并代入模式。 这是一个简单的例子:

; 检查:测试5:
; 检查:现在 [[注册:%[az]+]]
; 检查:andw {{.*}}[[注册]]

第一个检查行匹配正则表达式 %[az]+ 并将其捕获到变量中 报名注册.
第二行验证无论在 报名注册 发生在文件的后面
"". 文件检查 变量引用总是包含在 [[ ]] 对,以及他们的
名称可以用正则表达式形成 [a-zA-Z][a-zA-Z0-9]*. 如果名称后面有冒号,
那么它是变量的定义; 否则,它是一种用途。

文件检查 变量可以定义多次,使用时总是得到最新的值。
变量也可以稍后在定义它们的同一行上使用。 例如:

; 检查:op [[REG:r[0-9]+]], [[REG]]

如果您想要操作数,可能会很有用 op 是同一个寄存器,不在乎
究竟是哪个寄存器。

文件检查 表达式
有时需要验证引用匹配文件行号的输出,
例如在测试编译器诊断时。 这引入了匹配的一定脆弱性
文件结构,如“校验:" 行包含同一文件中的绝对行号,其中
每当由于文本添加或删除而更改行号时,都必须更新。

为了支持这种情况,FileCheck 允许使用 [[@线]], [[@LINE+ ]],
[[@线- ]] 模式中的表达。 这些表达式扩展到许多
模式所在的行(带有可选的整数偏移量)。

这种方式可以将匹配模式放在相关测试线附近并包括相关线
编号参考,例如:

// 检查:test.cpp:[[@LINE+4]]:6: 错误:预期的';' 在顶级声明符之后
// 检查下一个:{{^int a}}
// 检查下一个:{{^ \^}}
// 检查下一个:{{^ ;}}
内部

使用 onworks.net 服务在线使用 FileCheck-3.6


免费服务器和工作站

下载 Windows 和 Linux 应用程序

  • 1
    Eclipse Tomcat 插件
    Eclipse Tomcat 插件
    Eclipse Tomcat 插件提供
    一个tomcat servlet的简单集成
    java开发的容器
    网络应用程序。 你可以加入我们
    讨论...
    下载 Eclipse Tomcat 插件
  • 2
    WebTorrent桌面
    WebTorrent桌面
    WebTorrent 桌面用于流式传输
    在 Mac、Windows 或 Linux 上下载种子。 它
    连接到 BitTorrent 和
    WebTorrent 同行。 现在没有了
    需要等待...
    下载 WebTorrent 桌面版
  • 3
    GEnx发动机
    GEnx发动机
    GenX 是一个科学的程序来改进
    X 射线反射率,中子
    反射率和表面 X 射线
    使用差分的衍射数据
    进化算法……
    下载 GenX
  • 4
    pspp4窗口
    pspp4窗口
    PSPP 是一个统计程序
    采样数据的分析。 这是一个免费的
    专有程序的替代品
    统计软件。 PSPP 同时具有基于文本和
    图形我们...
    下载 pspp4windows
  • 5
    Git 扩展
    Git 扩展
    Git Extensions 是一个独立的 UI 工具
    用于管理 Git 存储库。 它也是
    与 Windows 资源管理器和
    Microsoft Visual Studio
    (2015/2017/2019)。 这...
    下载 Git 扩展
  • 6
    eSpeak:语音合成
    eSpeak:语音合成
    英语文本到语音引擎和
    许多其他语言。 紧凑的尺寸与
    清晰但做作的发音。
    可作为命令行程序使用
    许多 ...
    下载 eSpeak:语音合成
  • 更多 ”

Linux 命令

Ad