Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

FileCheck-3.6 - Trực tuyến trên đám mây

Chạy FileCheck-3.6 trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS

Đây là lệnh FileCheck-3.6 có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


FileCheck - Trình xác minh tệp đối sánh mẫu linh hoạt

SYNOPSIS


Kiểm tra file tên tập tin khớp [--check-prefix = XXX] [- khoảng trắng hạn chế]

MÔ TẢ


Kiểm tra file đọc hai tệp (một từ đầu vào tiêu chuẩn và một tệp được chỉ định trên dòng lệnh)
và sử dụng cái này để xác minh cái kia. Hành vi này đặc biệt hữu ích cho testsuite,
muốn xác minh rằng đầu ra của một số công cụ (ví dụ: llc) chứa dự kiến
thông tin (ví dụ: movsd từ esp hoặc bất cứ thứ gì thú vị). Điều này tương tự
đối với việc sử dụng grep, nhưng nó được tối ưu hóa để khớp với nhiều đầu vào khác nhau trong một tệp trong một
thứ tự cụ thể.

Sản phẩm tên tập tin khớp tệp chỉ định tệp chứa các mẫu để khớp. Tập tin
để xác minh được đọc từ đầu vào tiêu chuẩn trừ khi --tập tin đầu vào tùy chọn được sử dụng.

LỰA CHỌN


-Cứu giúp In bản tóm tắt các tùy chọn dòng lệnh.

- tiền tố kiểm tra tiếp đầu ngữ
FileCheck tìm kiếm nội dung của tên tập tin khớp cho các mẫu phù hợp. Qua
mặc định, các mẫu này có tiền tố là "KIỂM TRA:". Nếu bạn muốn sử dụng
tiền tố khác nhau (ví dụ: vì cùng một tệp đầu vào đang kiểm tra nhiều
công cụ hoặc tùy chọn), - tiền tố kiểm tra đối số cho phép bạn chỉ định một hoặc nhiều
tiền tố để phù hợp. Nhiều tiền tố hữu ích cho các thử nghiệm có thể thay đổi đối với
các tùy chọn chạy khác nhau, nhưng hầu hết các dòng vẫn giống nhau.

--tập tin đầu vào tên tập tin
Tệp để kiểm tra (mặc định là stdin).

- khoảng trắng hạn chế
Theo mặc định, FileCheck chuẩn hóa khoảng trắng đầu vào theo chiều ngang (dấu cách và tab)
khiến nó bỏ qua những khác biệt này (một khoảng trắng sẽ khớp với một tab). Các
- khoảng trắng hạn chế đối số vô hiệu hóa hành vi này. Trình tự cuối dòng là
được chuẩn hóa thành kiểu UNIX \n trong tất cả các chế độ.

--ngầm-kiểm tra-không mẫu kiểm tra
Thêm các kiểm tra phủ định ngầm định cho các mẫu được chỉ định giữa các kiểm tra tích cực.
Tùy chọn cho phép viết các bài kiểm tra nghiêm ngặt hơn mà không cần nhồi nhét chúng KIỂM TRA-KHÔNGs.

Ví dụ, "--ngầm-kiểm tra-không cảnh báo:"có thể hữu ích khi kiểm tra chẩn đoán
tin nhắn từ các công cụ không có tùy chọn tương tự như kêu vang -xác nhận. Với cái này
tùy chọn FileCheck sẽ xác minh rằng đầu vào không chứa các cảnh báo không được đề cập trong
bất kì KIỂM TRA: hoa văn.

-phiên bản
Hiển thị số phiên bản của chương trình này.

EXIT TÌNH TRẠNG


If Kiểm tra file xác minh rằng tệp khớp với nội dung mong đợi, tệp sẽ thoát bằng 0.
Ngược lại, nếu không, hoặc nếu xảy ra lỗi, nó sẽ thoát với giá trị khác XNUMX.

Tutorial


FileCheck thường được sử dụng từ các bài kiểm tra hồi quy LLVM, được gọi trên dòng RUN của
các bài kiểm tra. Một ví dụ đơn giản về việc sử dụng FileCheck từ một dòng RUN trông như sau:

; CHẠY: llvm-as <% s | llc -march = x86-64 | Kiểm tra tệp% s

Cú pháp này cho biết để chuyển tệp hiện tại ("%s") vào trong llvm-như, đặt nó vào llcthì
đầu ra của llc trong Kiểm tra file. Điều này có nghĩa là FileCheck sẽ xác minh
đầu vào chuẩn (đầu ra llc) so với đối số tên tệp được chỉ định (bản gốc .NS
tệp được chỉ định bởi "%s"). Để xem cách này hoạt động như thế nào, hãy xem phần còn lại của .NS hồ sơ
(sau dòng RUN):

xác định void @ sub1 (i32 *% p, i32% v) {
mục nhập:
; KIỂM TRA: sub1:
; KIỂM TRA: subl
% 0 = cuộc gọi đuôi i32 @ llvm.atomic.load.sub.i32.p0i32 (i32 *% p, i32% v)
vô hiệu hóa
}

xác định void @ inc4 (i64 *% p) {
mục nhập:
; KIỂM TRA: inc4:
; KIỂM TRA: bao gồm
% 0 = cuộc gọi đuôi i64 @ llvm.atomic.load.add.i64.p0i64 (i64 *% p, i64 1)
vô hiệu hóa
}

Ở đây bạn có thể thấy một số "KIỂM TRA:"dòng được chỉ định trong nhận xét. Bây giờ bạn có thể thấy cách tệp
được đưa vào llvm-nhưthì llcvà đầu ra mã máy là những gì chúng tôi đang xác minh.
FileCheck kiểm tra đầu ra mã máy để xác minh rằng nó khớp với những gì "KIỂM TRA:"dòng
chỉ rõ.

Cú pháp của "KIỂM TRA:"các dòng rất đơn giản: chúng là các chuỗi cố định phải xảy ra trong
đặt hàng. FileCheck mặc định bỏ qua sự khác biệt về khoảng trắng ngang (ví dụ: khoảng trắng là
được phép khớp với một tab) nhưng nếu không, nội dung của "KIỂM TRA:dòng "được yêu cầu
khớp chính xác một số thứ trong tệp thử nghiệm.

Một điều thú vị về FileCheck (so với grep) là nó cho phép hợp nhất các trường hợp thử nghiệm
với nhau thành các nhóm hợp lý. Ví dụ: bởi vì thử nghiệm ở trên đang kiểm tra
"phụ1:"Và"bao gồm4:"nhãn, nó sẽ không khớp trừ khi có"phụ"ở giữa những
nhãn mác. Nếu nó tồn tại ở một nơi khác trong tệp, điều đó sẽ không được tính: "grep phụ"
khớp nếu "phụ"tồn tại ở bất kỳ đâu trong tệp.

Sản phẩm Kiểm tra file -kiểm tra-tiền tố tùy chọn
Kiểm tra tệp -kiểm tra-tiền tố tùy chọn cho phép nhiều cấu hình thử nghiệm được điều khiển từ
một .NS tập tin. Điều này hữu ích trong nhiều trường hợp, ví dụ: thử nghiệm các
các biến thể kiến ​​trúc với llc. Đây là một ví dụ đơn giản:

; CHẠY: llvm-as <% s | llc -mtriple = i686-apple-darwin9 -mattr = sse41 \
; CHẠY: | FileCheck% s -check-prefix = X32
; CHẠY: llvm-as <% s | llc -mtriple = x86_64-apple-darwin9 -mattr = sse41 \
; CHẠY: | FileCheck% s -check-prefix = X64

xác định <4 x i32> @pinrd_1 (i32% s, <4 x i32>% tmp) nounwind {
% tmp1 = inserttelement <4 x i32>; % tmp, i32% s, i32 1
ret <4 x i32>% tmp1
; X32 :pinrd_1:
; X32: đinh ghim $ 1, 4 (% esp),% xmm0

; X64 :pinrd_1:
; X64: đinh ghim $ 1,% edi,% xmm0
}

Trong trường hợp này, chúng tôi đang kiểm tra để đảm bảo rằng chúng tôi có được thế hệ mã dự kiến ​​với cả 32-bit và
Tạo mã 64-bit.

Sản phẩm KIỂM TRA-TIẾP THEO: Chỉ thị
Đôi khi bạn muốn khớp các dòng và muốn xác minh rằng các trận đấu diễn ra chính xác trên
các dòng liên tiếp không có dòng nào khác ở giữa chúng. Trong trường hợp này, bạn có thể sử dụng "KIỂM TRA:"
và "KIỂM TRA-TIẾP THEO:"để chỉ định điều này. Nếu bạn đã chỉ định tiền tố kiểm tra tùy chỉnh,
chỉ dùng "-KẾ TIẾP:". Ví dụ, một cái gì đó như thế này hoạt động như bạn mong đợi:

định nghĩa void @ t2 (<2 x double> *% r, <2 x double> *% A, double% B) {
% tmp3 = load <2 x double> *% A, căn chỉnh 16
% tmp7 = inserttelement <2 x double> undef, double% B, i32 0
% tmp9 = shufflevector <2 x double>% tmp3,
<2 x gấp đôi>% tmp7,
<2 x i32> <i32 0, i32 2>
lưu trữ <2 x double>% tmp9, <2 x double> *% r, căn chỉnh 16
vô hiệu hóa

; KIỂM TRA: t2:
; KIỂM TRA: tháng 8 (% esp),% eax
; KIỂM TRA-TIẾP THEO: movapd (% eax),% xmm0
; KIỂM TRA-TIẾP THEO: movhpd 12 (% esp),% xmm0
; KIỂM TRA-TIẾP THEO: movl 4 (% esp),% eax
; KIỂM TRA-TIẾP THEO: movapd% xmm0, (% eax)
; KIỂM TRA-TIẾP THEO: ret
}

"KIỂM TRA-TIẾP THEO:"các lệnh từ chối đầu vào trừ khi có chính xác một dòng mới giữa nó
và chỉ thị trước đó. MỘT "KIỂM TRA-TIẾP THEO:"không thể là chỉ thị đầu tiên trong tệp.

Sản phẩm KIỂM TRA-KHÔNG: Chỉ thị
The "KIỂM TRA-KHÔNG:"chỉ thị được sử dụng để xác minh rằng một chuỗi không xảy ra giữa hai
trận đấu (hoặc trước trận đấu đầu tiên, hoặc sau trận đấu cuối cùng). Ví dụ, để xác minh rằng
tải được loại bỏ bởi một phép biến đổi, một bài kiểm tra như thế này có thể được sử dụng:

xác định i8 @ coerce_offset0 (i32% V, i32 *% P) {
lưu trữ i32% V, i32 *% P

% P2 = bitcast i32 *% P đến i8 *
% P3 = getelementptr i8 *% P2, i32 2

% A = tải i8 *% P3
ret i8% A
; KIỂM TRA: @ coerce_offset0
; CHECK-NOT: tải
; KIỂM TRA: ret i8
}

Sản phẩm KIỂM TRA-DAG: Chỉ thị
Nếu cần khớp các chuỗi không diễn ra theo thứ tự tuần tự nghiêm ngặt,
"KIỂM TRA-DAG:"có thể được sử dụng để xác minh chúng giữa hai trận đấu (hoặc trước trận đấu đầu tiên,
hoặc sau trận đấu cuối cùng). Ví dụ, clang phát ra các khối cầu vtable theo thứ tự ngược lại. Sử dụng
KIỂM TRA-DAG:, chúng tôi có thể giữ séc theo thứ tự tự nhiên:

// CHẠY:% clang_cc1% s -emit-llvm -o - | Kiểm tra tệp% s

struct Foo {virtual void method (); };
Foo f; // phát ra vtable
// KIỂM TRA-DAG: @ _ZTV3Foo =

struct Bar {virtual void method (); };
Thanh b;
// KIỂM TRA-DAG: @ _ZTV3Bar =

KIỂM TRA-KHÔNG: các chỉ thị có thể được trộn lẫn với KIỂM TRA-DAG: chỉ thị để loại trừ các chuỗi giữa
những thứ xung quanh KIỂM TRA-DAG: các chỉ thị. Kết quả là, xung quanh KIỂM TRA-DAG: chỉ thị
không thể được sắp xếp lại, tức là tất cả các lần xuất hiện đều khớp KIỂM TRA-DAG: trước KIỂM TRA-KHÔNG: không cần
tụt hậu so với các lần xuất hiện phù hợp KIỂM TRA-DAG: sau khi KIỂM TRA-KHÔNG:. Ví dụ,

; CHECK-DAG: TRƯỚC
; KIỂM TRA-KHÔNG: KHÔNG
; CHECK-DAG: SAU

Trường hợp này sẽ từ chối các chuỗi đầu vào trong đó TRƯỚC KHI xảy ra sau SAU.

Với các biến đã nắm bắt, KIỂM TRA-DAG: có thể khớp với các cấu trúc tôpô hợp lệ của một DAG
với các cạnh từ định nghĩa của một biến đến việc sử dụng nó. Nó hữu ích, ví dụ, khi
các trường hợp kiểm thử cần phải phù hợp với các chuỗi đầu ra khác nhau từ bộ lập lịch hướng dẫn. Vì
thí dụ,

; CHECK-DAG: thêm [[REG1: r [0-9] +]], r1, r2
; CHECK-DAG: thêm [[REG2: r [0-9] +]], r3, r4
; KIỂM TRA: mul r5, [[REG1]], [[REG2]]

Trong trường hợp này, bất kỳ thứ tự nào trong hai thứ đó thêm vào hướng dẫn sẽ được cho phép.

Nếu bạn đang xác định sử dụng các biến giống nhau KIỂM TRA-DAG: khối, lưu ý rằng
quy tắc định nghĩa có thể phù hợp sau khi công dụng của nó.

Vì vậy, ví dụ, đoạn mã dưới đây sẽ vượt qua:

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

Trong khi mã khác này, sẽ không:

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

Mặc dù điều này có thể rất hữu ích, nhưng nó cũng nguy hiểm, vì trong trường hợp đăng ký
trình tự, bạn phải có một trật tự mạnh mẽ (đọc trước khi viết, sao chép trước khi sử dụng, v.v.). Nếu
định nghĩa mà thử nghiệm của bạn đang tìm kiếm không khớp (do lỗi trong trình biên dịch), nó
có thể phù hợp hơn với việc sử dụng và che giấu các lỗi thực sự.

Trong những trường hợp đó, để thực thi lệnh, hãy sử dụng lệnh không phải DAG giữa các khối DAG.

Sản phẩm KIỂM TRA-NHÃN: Chỉ thị
Đôi khi trong một tệp chứa nhiều bài kiểm tra được chia thành các khối logic, một hoặc nhiều
KIỂM TRA: các lệnh có thể vô tình thành công khi khớp các dòng trong một khối sau đó. Trong khi một
cuối cùng thường sẽ được tạo ra lỗi, séc được gắn cờ là nguyên nhân gây ra lỗi có thể không
thực sự có bất kỳ mối quan hệ nào với nguồn gốc thực sự của vấn đề.

Để tạo ra các thông báo lỗi tốt hơn trong những trường hợp này, "KIỂM TRA-NHÃN:"chỉ thị có thể
được dùng. Nó được đối xử giống như bình thường KIỂM TRA chỉ thị ngoại trừ FileCheck thực hiện
một giả định bổ sung rằng một dòng được khớp với lệnh cũng không thể được khớp với
bất kỳ kiểm tra nào khác có trong tên tập tin khớp; cái này được thiết kế để sử dụng cho các dòng
có chứa nhãn hoặc số nhận dạng duy nhất khác. Về mặt khái niệm, sự hiện diện của KIỂM TRA-NHÃN
chia luồng đầu vào thành các khối riêng biệt, mỗi khối được xử lý độc lập,
ngăn chặn một KIỂM TRA: chỉ thị trong một khối phù hợp với một dòng trong khối khác. Ví dụ,

xác định% struct.C * @C_ctor_base (% struct.C *% this, i32% x) {
mục nhập:
; KIỂM TRA-NHÃN: C_ctor_base:
; KIỂM TRA: mov [[SAVETHIS: r [0-9] +]], r0
; KIỂM TRA: bl A_ctor_base
; KIỂM TRA: mov r0, [[SAVETHIS]]
% 0 = bitcast% struct.C *% this to% struct.A *
% call = tail call% struct.A * @A_ctor_base (% struct.A *% 0)
% 1 = bitcast% struct.C *% this to% struct.B *
% call2 = tail call% struct.B * @B_ctor_base (% struct.B *% 1, i32% x)
ret% struct.C *% this
}

xác định% struct.D * @D_ctor_base (% struct.D *% this, i32% x) {
mục nhập:
; KIỂM TRA-LABEL: D_ctor_base:

Việc sử dụng KIỂM TRA-NHÃN: các chỉ thị trong trường hợp này đảm bảo rằng ba KIỂM TRA: chỉ thị
chỉ chấp nhận các dòng tương ứng với phần thân của @C_ctor_base chức năng, ngay cả khi
các mẫu khớp với các dòng được tìm thấy sau này trong tệp. Hơn nữa, nếu một trong ba điều này KIỂM TRA:
lệnh không thành công, FileCheck sẽ khôi phục bằng cách tiếp tục đến khối tiếp theo, cho phép nhiều
các lỗi kiểm tra được phát hiện trong một lệnh gọi duy nhất.

Không có yêu cầu KIỂM TRA-NHÃN: chỉ thị chứa các chuỗi tương ứng với
các nhãn cú pháp thực tế trong ngôn ngữ nguồn hoặc ngôn ngữ đầu ra: chúng chỉ đơn giản là khớp duy nhất
một dòng trong tệp đang được xác minh.

KIỂM TRA-NHÃN: các chỉ thị không thể chứa các định nghĩa hoặc cách sử dụng biến.

Kiểm tra file Họa tiết Phù hợp cú pháp
The "KIỂM TRA:"Và"KIỂM TRA-KHÔNG:"cả hai lệnh đều có một mẫu để phù hợp. Đối với hầu hết các trường hợp sử dụng
FileCheck, khớp chuỗi cố định là hoàn toàn đủ. Đối với một số điều, một
hình thức kết hợp linh hoạt được mong muốn. Để hỗ trợ điều này, FileCheck cho phép bạn chỉ định
biểu thức chính quy trong các chuỗi phù hợp, được bao quanh bởi dấu ngoặc kép: {{yourregex}}.
Bởi vì chúng tôi muốn sử dụng đối sánh chuỗi cố định cho phần lớn những gì chúng tôi làm, FileCheck có
được thiết kế để hỗ trợ trộn và kết hợp khớp chuỗi cố định với
biểu thức. Điều này cho phép bạn viết những thứ như sau:

; KIỂM TRA: movhpd {{[0-9] +}} (% esp), {{% xmm [0-7]}}

Trong trường hợp này, bất kỳ độ lệch nào từ thanh ghi ESP sẽ được cho phép và mọi thanh ghi xmm sẽ
được cho phép.

Bởi vì các biểu thức chính quy được bao quanh bởi dấu ngoặc kép, chúng rất khác biệt về mặt trực quan,
và bạn không cần phải sử dụng các ký tự thoát trong dấu ngoặc kép như bạn làm trong C.
Trong trường hợp hiếm hoi mà bạn muốn so khớp dấu ngoặc kép một cách rõ ràng từ đầu vào, bạn có thể
sử dụng một cái gì đó xấu xí như {{[{][{]}} như khuôn mẫu của bạn.

Kiểm tra file Biến
Nó thường hữu ích khi so khớp một mẫu và sau đó xác minh rằng nó xuất hiện lại sau đó trong
tập tin. Đối với các bài kiểm tra codegen, điều này có thể hữu ích để cho phép bất kỳ đăng ký nào, nhưng hãy xác minh rằng
đăng ký được sử dụng nhất quán sau này. Để làm điều này, Kiểm tra file cho phép các biến được đặt tên là
được xác định và thay thế thành các mẫu. Đây là một ví dụ đơn giản:

; KIỂM TRA: test5:
; KIỂM TRA: notw [[ĐĂNG KÝ:% [az] +]]
; KIỂM TRA: andw {{. *}} [[ĐĂNG KÝ]]

Dòng kiểm tra đầu tiên khớp với một regex % [az] + và ghi lại nó vào biến ĐĂNG KÝ.
Dòng thứ hai xác minh rằng bất cứ điều gì trong ĐĂNG KÝ xuất hiện sau trong tệp sau một
"và W". Kiểm tra file tham chiếu biến luôn được chứa trong [[ ]] các cặp, và của họ
tên có thể được tạo bằng regex [a-zA-Z] [a-zA-Z0-9] *. Nếu dấu hai chấm theo sau tên,
thì nó là một định nghĩa của biến; nếu không, nó là một sử dụng.

Kiểm tra file các biến có thể được xác định nhiều lần và các lần sử dụng luôn nhận được giá trị mới nhất.
Các biến cũng có thể được sử dụng sau này trên cùng dòng mà chúng đã được định nghĩa. Ví dụ:

; KIỂM TRA: op [[REG: r [0-9] +]], [[REG]]

Có thể hữu ích nếu bạn muốn toán hạng của op là cùng một sổ đăng ký, và không quan tâm
chính xác đó là đăng ký.

Kiểm tra file Biểu thức
Đôi khi cần phải xác minh đầu ra đề cập đến số dòng của tệp đối sánh,
ví dụ: khi kiểm tra chẩn đoán trình biên dịch. Điều này giới thiệu một sự mong manh nhất định của trận đấu
cấu trúc tệp, như "KIỂM TRA:"các dòng chứa số dòng tuyệt đối trong cùng một tệp,
phải được cập nhật bất cứ khi nào số dòng thay đổi do thêm hoặc xóa văn bản.

Để hỗ trợ trường hợp này, FileCheck cho phép sử dụng [[@HÀNG]], [[@ LINE + ]],
[[@HÀNG- ]] biểu thức trong các mẫu. Các biểu thức này mở rộng đến một số
dòng nơi đặt một mẫu (với độ lệch số nguyên tùy chọn).

Bằng cách này, các mẫu đối sánh có thể được đặt gần các đường thử nghiệm có liên quan và bao gồm đường tương đối
tham chiếu số, ví dụ:

// KIỂM TRA: test.cpp: [[@ LINE + 4]]: 6: error: mong đợi ';' sau trình khai báo cấp cao nhất
// KIỂM TRA-TIẾP THEO: {{^ int a}}
// KIỂM TRA-TIẾP THEO: {{^ \ ^}}
// KIỂM TRA-TIẾP THEO: {{^;}}
int một

Sử dụng FileCheck-3.6 trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad