FileCheck-3.6 - ออนไลน์ในคลาวด์

นี่คือคำสั่ง FileCheck-3.6 ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


FileCheck - ตัวตรวจสอบไฟล์จับคู่รูปแบบที่ยืดหยุ่น

เรื่องย่อ


ตรวจสอบไฟล์ ชื่อไฟล์ที่ตรงกัน [--check-คำนำหน้า=XXX] [--strict-ช่องว่าง]

DESCRIPTION


ตรวจสอบไฟล์ อ่านสองไฟล์ (หนึ่งไฟล์จากอินพุตมาตรฐาน และอีกไฟล์หนึ่งระบุไว้ในบรรทัดคำสั่ง)
และใช้อันหนึ่งเพื่อตรวจสอบอีกอันหนึ่ง ลักษณะการทำงานนี้มีประโยชน์อย่างยิ่งสำหรับชุดทดสอบ
ซึ่งต้องการตรวจสอบว่าผลลัพธ์ของเครื่องมือบางอย่าง (เช่น LLC) มีความคาดหวัง
ข้อมูล (เช่น movsd จาก esp หรืออะไรก็ตามที่น่าสนใจ) นี่ก็คล้ายกัน
ที่จะใช้ grepแต่ได้รับการปรับให้เหมาะสมสำหรับการจับคู่อินพุตที่แตกต่างกันหลายรายการในไฟล์เดียวในa
คำสั่งเฉพาะ

พื้นที่ ชื่อไฟล์ที่ตรงกัน file ระบุไฟล์ที่มีรูปแบบที่จะจับคู่ ไฟล์
เพื่อตรวจสอบว่าอ่านจากอินพุตมาตรฐาน เว้นแต่ว่า --input-ไฟล์ ใช้ตัวเลือก

OPTIONS


-ช่วยด้วย พิมพ์สรุปตัวเลือกบรรทัดคำสั่ง

--check-คำนำหน้า อุปสรรค
FileCheck ค้นหาเนื้อหาของ ชื่อไฟล์ที่ตรงกัน เพื่อให้ลวดลายเข้ากัน โดย
ค่าเริ่มต้น รูปแบบเหล่านี้จะขึ้นต้นด้วย "ตรวจสอบ:" หากคุณต้องการใช้ a
คำนำหน้าต่างกัน (เช่น เนื่องจากไฟล์อินพุตเดียวกันกำลังตรวจสอบหลายไฟล์ที่แตกต่างกัน
เครื่องมือหรือตัวเลือก) the --check-คำนำหน้า อาร์กิวเมนต์ช่วยให้คุณระบุหนึ่งหรือหลายรายการ
คำนำหน้าเพื่อให้ตรงกับ คำนำหน้าหลายคำมีประโยชน์สำหรับการทดสอบที่อาจเปลี่ยนสำหรับ
ตัวเลือกการรันที่แตกต่างกัน แต่บรรทัดส่วนใหญ่ยังคงเหมือนเดิม

--input-ไฟล์ ชื่อไฟล์
ไฟล์ที่จะตรวจสอบ (ค่าเริ่มต้นคือ stdin)

--strict-ช่องว่าง
ตามค่าเริ่มต้น FileCheck จะกำหนดช่องว่างแนวนอนของอินพุต (ช่องว่างและแท็บ)
ซึ่งทำให้ละเว้นความแตกต่างเหล่านี้ (ช่องว่างจะตรงกับแท็บ) NS
--strict-ช่องว่าง อาร์กิวเมนต์ปิดการใช้งานลักษณะการทำงานนี้ ลำดับสิ้นสุดบรรทัดคือ
บัญญัติให้เป็นสไตล์ UNIX \n ในทุกโหมด

--โดยปริยาย-ตรวจสอบ-ไม่ รูปแบบการตรวจสอบ
เพิ่มการตรวจสอบเชิงลบโดยนัยสำหรับรูปแบบที่ระบุระหว่างการตรวจสอบที่เป็นบวก
ตัวเลือกนี้อนุญาตให้เขียนการทดสอบที่เข้มงวดขึ้นโดยไม่ต้องบรรจุด้วย ตรวจสอบ-ไม่s.

ตัวอย่างเช่น, "--โดยปริยาย-ตรวจสอบ-ไม่ คำเตือน:" มีประโยชน์เมื่อทำการทดสอบการวินิจฉัย
ข้อความจากเครื่องมือที่ไม่มีตัวเลือกคล้ายกับ เสียงดังกราว -ตรวจสอบ. ด้วยสิ่งนี้
ตัวเลือก FileCheck จะตรวจสอบว่าอินพุตไม่มีคำเตือนที่ไม่ครอบคลุมโดย
ใด ตรวจสอบ: รูปแบบ

-version
แสดงหมายเลขเวอร์ชันของโปรแกรมนี้

EXIT สถานภาพ


If ตรวจสอบไฟล์ ตรวจสอบว่าไฟล์ตรงกับเนื้อหาที่คาดไว้ ออกจากไฟล์ด้วย 0
มิฉะนั้น ถ้าไม่ใช่ หรือเกิดข้อผิดพลาดขึ้น มันจะออกด้วยค่าที่ไม่ใช่ศูนย์

การสอน


โดยทั่วไปแล้ว FileCheck จะใช้จากการทดสอบการถดถอย LLVM ซึ่งถูกเรียกใช้บนบรรทัด RUN ของ
การทดสอบ ตัวอย่างง่ายๆ ของการใช้ FileCheck จากบรรทัด RUN มีลักษณะดังนี้:

; เรียกใช้: llvm-as < %s | llc -march=x86-64 | ตรวจสอบไฟล์ %s

ไวยากรณ์นี้บอกว่าจะไพพ์ไฟล์ปัจจุบัน ("%s") เข้าไปข้างใน llvm-เป็น, ท่อที่เข้า LLCแล้ว
ท่อส่งออกของ LLC เข้าไป ตรวจสอบไฟล์. ซึ่งหมายความว่า FileCheck จะตรวจสอบ
อินพุตมาตรฐาน (เอาต์พุต llc) เทียบกับอาร์กิวเมนต์ชื่อไฟล์ที่ระบุ (ต้นฉบับ .NS
ไฟล์ที่ระบุโดย "%s") เพื่อดูว่ามันทำงานอย่างไร มาดูส่วนที่เหลือของ .NS ไฟล์
(หลังเส้น RUN):

กำหนดเป็นโมฆะ @sub1(i32* %p, i32 %v) {
รายการ:
; ตรวจสอบ: sub1:
; ตรวจสอบ: 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-เป็นแล้ว LLCและผลลัพธ์ของรหัสเครื่องคือสิ่งที่เรากำลังตรวจสอบ
FileCheck ตรวจสอบเอาต์พุตรหัสเครื่องเพื่อตรวจสอบว่าตรงกับ "ตรวจสอบ:" เส้น
ระบุ.

ไวยากรณ์ของ "ตรวจสอบ:" บรรทัดนั้นง่ายมาก: เป็นสตริงคงที่ที่ต้องเกิดขึ้นใน
คำสั่ง. FileCheck เริ่มต้นที่จะละเว้นความแตกต่างของช่องว่างในแนวนอน (เช่น ช่องว่าง is
อนุญาตให้จับคู่แท็บ) แต่มิฉะนั้น เนื้อหาของ "ตรวจสอบ:" ต้องใช้บรรทัดเพื่อ
จับคู่บางสิ่งในไฟล์ทดสอบทุกประการ

สิ่งหนึ่งที่ดีเกี่ยวกับ FileCheck (เทียบกับ grep) คือช่วยให้สามารถรวมกรณีทดสอบได้
รวมกันเป็นกลุ่มตรรกะ ตัวอย่างเช่น เนื่องจากการทดสอบข้างต้นเป็นการตรวจหา
"ย่อย1:"และ"รวม4:" ป้ายกำกับจะไม่ตรงกันเว้นแต่จะมี "ย่อย"ระหว่างนั้น
ฉลาก หากมีอยู่ที่อื่นในไฟล์ จะไม่นับ: "grep ย่อย"
ตรงกันถ้า "ย่อย" อยู่ที่ใดก็ได้ในไฟล์

พื้นที่ ตรวจสอบไฟล์ -check-คำนำหน้า ตัวเลือก
การตรวจสอบไฟล์ -check-คำนำหน้า ตัวเลือกช่วยให้สามารถขับเคลื่อนการกำหนดค่าการทดสอบได้หลายแบบจาก
หนึ่ง .NS ไฟล์. สิ่งนี้มีประโยชน์ในหลาย ๆ สถานการณ์ เช่น การทดสอบที่แตกต่างกัน
ตัวแปรทางสถาปัตยกรรมด้วย LLC. นี่เป็นตัวอย่างง่ายๆ:

; เรียกใช้: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41
; วิ่ง: | FileCheck %s -check-prefix=X32
; เรียกใช้: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41
; วิ่ง: | FileCheck %s -check-prefix=X64

กำหนด <4 x i32> @pinsrd_1 (i32 %s, <4 x i32> %tmp) คำนาม {
%tmp1 = องค์ประกอบแทรก <4 x i32>; %tmp, i32 %s, i32 1
ย้อน <4 x i32> %tmp1
; X32: หมุดrd_1:
; X32: หมุด $1, 4(%esp), %xmm0

; X64: หมุดrd_1:
; X64: หมุด $1, %edi, %xmm0
}

ในกรณีนี้ เรากำลังทดสอบว่าเราได้รับการสร้างโค้ดที่คาดหวังด้วยทั้งแบบ 32 บิตและ
การสร้างรหัส 64 บิต

พื้นที่ ตรวจสอบ-ถัดไป: คำสั่ง
บางครั้งคุณต้องการจับคู่บรรทัดและต้องการตรวจสอบว่าการจับคู่เกิดขึ้นตรงหรือไม่
บรรทัดที่ต่อเนื่องกันโดยไม่มีบรรทัดอื่นคั่นระหว่างพวกเขา ในกรณีนี้ คุณสามารถใช้ "ตรวจสอบ:"
และ "ตรวจสอบ-ถัดไป:" คำสั่งเพื่อระบุสิ่งนี้ หากคุณระบุคำนำหน้าการตรวจสอบที่กำหนดเอง
เพียงแค่ใช้ "-ต่อไป:" ตัวอย่างเช่น สิ่งนี้ใช้ได้ผลตามที่คุณคาดหวัง:

กำหนดเป็นโมฆะ @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
%tmp3 = โหลด <2 x double>* %A, จัดตำแหน่ง 16
%tmp7 = การแทรก <2 x double> undef, double %B, i32 0
%tmp9 = สับเปลี่ยนเวกเตอร์ <2 x สองเท่า> %tmp3,
<2 x สองเท่า> %tmp7,
<2 x i32> < i32 0, i32 2 >
เก็บ <2 x double> %tmp9, <2 x double>* %r, จัดตำแหน่ง 16
เลิกเป็นโมฆะ

; ตรวจสอบ: t2:
; ตรวจสอบ: movl 8(%esp), %eax
; ตรวจสอบ-ถัดไป: movapd (%eax), %xmm0
; ตรวจสอบ-ถัดไป: movhpd 12(%esp), %xmm0
; ตรวจสอบ-ถัดไป: movl 4(%esp), %eax
; ตรวจสอบ-ถัดไป: movapd %xmm0, (%eax)
; ตรวจสอบ-ถัดไป: ย้อนกลับ
}

"ตรวจสอบ-ถัดไป:" คำสั่งปฏิเสธอินพุตเว้นแต่จะมีการขึ้นบรรทัดใหม่ระหว่างมัน
และคำสั่งก่อนหน้านี้ NS "ตรวจสอบ-ถัดไป:" ไม่สามารถเป็นคำสั่งแรกในไฟล์ได้

พื้นที่ ตรวจสอบ-ไม่: คำสั่ง
"การตรวจสอบ-ไม่:" directive ใช้เพื่อตรวจสอบว่าสตริงไม่เกิดขึ้นระหว่างสอง
การแข่งขัน (หรือก่อนนัดแรกหรือหลังนัดสุดท้าย) ตัวอย่างเช่น เพื่อตรวจสอบว่า
โหลดจะถูกลบออกโดยการแปลง การทดสอบเช่นนี้สามารถใช้ได้:

กำหนด i8 @coerce_offset0 (i32 %V, i32* %P) {
เก็บ i32 %V, i32* %P

%P2 = บิตคาสต์ i32* %P ถึง i8*
%P3 = รับองค์ประกอบ ptr i8* %P2, i32 2

%A = โหลด i8* %P3
ยกเลิก i8 %A
; ตรวจสอบ: @coerce_offset0
; ตรวจสอบ-ไม่: โหลด
; ตรวจสอบ: ยกเลิก i8
}

พื้นที่ ตรวจสอบ-DAG: คำสั่ง
หากจำเป็นต้องจับคู่สตริงที่ไม่เรียงลำดับอย่างเข้มงวด
"ตรวจสอบ-DAG:" สามารถใช้ตรวจสอบได้ระหว่างสองนัด (หรือก่อนนัดแรก
หรือหลังการแข่งขันนัดที่แล้ว) ตัวอย่างเช่น clang ปล่อย vtable globals ในลำดับที่กลับกัน โดยใช้
ตรวจสอบ-DAG:เราสามารถเก็บเช็คไว้ในลำดับที่เป็นธรรมชาติได้:

// วิ่ง: %clang_cc1 %s -emit-llvm -o - | ตรวจสอบไฟล์ %s

struct Foo { วิธีการโมฆะเสมือน (); };
ฟูฟ; // ปล่อย vtable
// เช็คแด็ก: @_ZTV3Foo =

struct Bar { วิธีการโมฆะเสมือน (); };
บาร์ข;
// เช็คแด็ก: @_ZTV3Bar =

ตรวจสอบ-ไม่: คำสั่งสามารถผสมกับ ตรวจสอบ-DAG: คำสั่งที่จะแยกสตริงระหว่าง
โดยรอบ ตรวจสอบ-DAG: คำสั่ง ส่งผลให้บริเวณโดยรอบ ตรวจสอบ-DAG: สั่ง
ไม่สามารถจัดลำดับใหม่ได้ กล่าวคือ ตรงกันทุกรายการ ตรวจสอบ-DAG: ก่อน ตรวจสอบ-ไม่: จะต้องไม่
อยู่เบื้องหลังเหตุการณ์ที่ตรงกัน ตรวจสอบ-DAG: หลังจาก ตรวจสอบ-ไม่:. ตัวอย่างเช่น

; ตรวจสอบ-DAG: ก่อน
; ตรวจสอบ-ไม่: ไม่
; ตรวจสอบ-DAG: หลังจาก

กรณีนี้จะปฏิเสธสตริงอินพุตโดยที่ ก่อน เกิดขึ้นหลังจาก หลัง.

ด้วยตัวแปรที่จับได้ ตรวจสอบ-DAG: สามารถจับคู่การเรียงลำดับทอพอโลยีที่ถูกต้องของ DAG
มีขอบตั้งแต่คำจำกัดความของตัวแปรจนถึงการใช้งาน มีประโยชน์ เช่น เมื่อคุณ
กรณีทดสอบจำเป็นต้องจับคู่ลำดับเอาต์พุตที่แตกต่างจากตัวกำหนดตารางเวลาคำสั่ง สำหรับ
ตัวอย่าง,

; ตรวจสอบ-DAG: เพิ่ม [[REG1:r[0-9]+]], r1, r2
; ตรวจสอบ-DAG: เพิ่ม [[REG2:r[0-9]+]], r3, r4
; ตรวจสอบ: mul r5, [[REG1]], [[REG2]]

ในกรณีนี้ ลำดับใดๆ ของสองตัวนั้น เพิ่ม คำแนะนำจะได้รับอนุญาต

หากคุณกำลังกำหนด และ โดยใช้ตัวแปรในตัวเดียวกัน ตรวจสอบ-DAG: บล็อก โปรดทราบว่า
กฎคำจำกัดความสามารถจับคู่ได้ หลังจาก การใช้งาน

ตัวอย่างเช่น รหัสด้านล่างจะผ่าน:

; ตรวจสอบ-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]

แม้ว่าสิ่งนี้จะมีประโยชน์มาก แต่ก็อันตรายเช่นกันเพราะในกรณีของการลงทะเบียน
ลำดับ คุณต้องมีลำดับที่ชัดเจน (อ่านก่อนเขียน คัดลอกก่อนใช้งาน ฯลฯ) ถ้า
คำจำกัดความที่การทดสอบของคุณกำลังมองหาไม่ตรงกัน (เนื่องจากข้อบกพร่องในคอมไพเลอร์) มัน
อาจจับคู่ห่างจากการใช้งานมากขึ้นและปิดบังข้อบกพร่องที่แท้จริงออกไป

ในกรณีดังกล่าว ในการบังคับใช้คำสั่ง ให้ใช้คำสั่ง non-DAG ระหว่าง DAG-block

พื้นที่ ตรวจสอบ-ป้ายกำกับ: คำสั่ง
บางครั้งในไฟล์ที่มีการทดสอบหลายรายการแบ่งออกเป็นบล็อกลอจิคัล อย่างน้อยหนึ่งบล็อก
ตรวจสอบ: คำสั่งอาจสำเร็จโดยไม่ตั้งใจโดยการจับคู่บรรทัดในบล็อกภายหลัง ในขณะที่ an
ข้อผิดพลาดมักจะถูกสร้างขึ้นในที่สุด การตรวจสอบที่ถูกตั้งค่าสถานะเป็นสาเหตุของข้อผิดพลาดอาจไม่
จริง ๆ แล้วมีความสัมพันธ์กับแหล่งที่มาที่แท้จริงของปัญหา

เพื่อให้เกิดข้อความแสดงข้อผิดพลาดที่ดีขึ้นในกรณีเหล่านี้ "ตรวจสอบ-ป้ายกำกับ:" คำสั่งสามารถ
ถูกนำมาใช้ มันได้รับการปฏิบัติเหมือนกันกับปกติ ตรวจสอบ คำสั่งยกเว้นว่า FileCheck ทำให้
สมมติฐานเพิ่มเติมว่าบรรทัดที่ตรงกับคำสั่งไม่สามารถจับคู่โดย
เช็คอื่น ๆ ที่มีอยู่ใน ชื่อไฟล์ที่ตรงกัน; นี้มีไว้สำหรับใช้สำหรับเส้น
มีป้ายกำกับหรือตัวระบุที่ไม่ซ้ำกันอื่นๆ ตามแนวคิด การมีอยู่ของ ตรวจสอบ-ฉลาก
แบ่งกระแสอินพุตออกเป็นบล็อกแยกกันซึ่งแต่ละอันได้รับการประมวลผลอย่างอิสระ
ป้องกัน ตรวจสอบ: คำสั่งในบล็อกหนึ่งที่ตรงกับบรรทัดในอีกบล็อกหนึ่ง ตัวอย่างเช่น,

กำหนด %struct.C* @C_ctor_base(%struct.C* % this, i32 %x) {
รายการ:
; ตรวจสอบ-ป้ายกำกับ: C_ctor_base:
; ตรวจสอบ: mov [[บันทึก:r[0-9]+]], r0
; ตรวจสอบ: bl A_ctor_base
; ตรวจสอบ: mov r0, [[บันทึก]]
%0 = bitcast %struct.C* % นี่ถึง %struct.A*
%call = การโทรหาง %struct.A* @A_ctor_base(%struct.A* %0)
%1 = bitcast %struct.C* %นี้ถึง %struct.B*
%call2 = การโทรหาง %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
ยกเลิก %struct.C* %นี้
}

กำหนด %struct.D* @D_ctor_base(%struct.D* % this, i32 %x) {
รายการ:
; ตรวจสอบ-ป้ายกำกับ: D_ctor_base:

การใช้งานของ ตรวจสอบ-ป้ายกำกับ: คำสั่งในกรณีนี้ทำให้มั่นใจได้ว่าสาม ตรวจสอบ: สั่ง
ยอมรับเฉพาะบรรทัดที่สอดคล้องกับเนื้อหาของ @C_ctor_base ฟังก์ชัน แม้ว่า
รูปแบบตรงกับบรรทัดที่พบในไฟล์ในภายหลัง นอกจากนี้ หากหนึ่งในสามข้อนี้ ตรวจสอบ:
คำสั่งล้มเหลว FileCheck จะกู้คืนโดยดำเนินการต่อไปยังบล็อกถัดไป อนุญาตหลายรายการ
ตรวจพบความล้มเหลวในการทดสอบในการเรียกใช้ครั้งเดียว

ไม่มีข้อกำหนดว่า ตรวจสอบ-ป้ายกำกับ: คำสั่งมีสตริงที่สอดคล้องกับ
ป้ายกำกับวากยสัมพันธ์ที่แท้จริงในภาษาต้นทางหรือภาษาที่ส่งออก: ต้องจับคู่เฉพาะ a . เท่านั้น
บรรทัดเดียวในไฟล์ที่กำลังตรวจสอบ

ตรวจสอบ-ป้ายกำกับ: คำสั่งต้องไม่มีคำจำกัดความหรือการใช้ตัวแปร

ตรวจสอบไฟล์ แบบแผน แม็ทชิ่ง วากยสัมพันธ์
"การตรวจสอบ:"และ"ตรวจสอบ-ไม่:" คำสั่งทั้งสองใช้รูปแบบเพื่อให้ตรงกัน สำหรับการใช้งานส่วนใหญ่
FileCheck การจับคู่สตริงคงที่ก็เพียงพอแล้ว สำหรับบางสิ่ง เพิ่มเติม
ต้องการรูปแบบการจับคู่ที่ยืดหยุ่น เพื่อรองรับสิ่งนี้ FileCheck ให้คุณระบุ
นิพจน์ทั่วไปในสตริงที่ตรงกัน ล้อมรอบด้วยเครื่องหมายปีกกาคู่: {{yourregex}}.
เนื่องจากเราต้องการใช้การจับคู่สตริงแบบคงที่กับสิ่งที่เราทำเป็นส่วนใหญ่ FileCheck จึงมี
ได้รับการออกแบบมาเพื่อรองรับการผสมและจับคู่สตริงคงที่ที่จับคู่กับปกติ
นิพจน์ สิ่งนี้ทำให้คุณสามารถเขียนสิ่งต่าง ๆ เช่นนี้:

; ตรวจสอบ: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}

ในกรณีนี้ ออฟเซ็ตใดๆ จากการลงทะเบียน ESP จะได้รับอนุญาต และการลงทะเบียน xmm ใดๆ จะ
ได้รับอนุญาต

เนื่องจากนิพจน์ทั่วไปปิดล้อมด้วยเครื่องหมายปีกกา XNUMX ชั้น จึงมองเห็นได้ชัดเจน
และคุณไม่จำเป็นต้องใช้อักขระหลีกภายในเครื่องหมายปีกกาคู่เหมือนใน C
ในกรณีที่หายากที่คุณต้องการจับคู่เครื่องหมายปีกกาคู่อย่างชัดเจนจากอินพุต คุณสามารถ
ใช้สิ่งที่น่าเกลียดเช่น {{[{][{]}} ตามแบบฉบับของคุณ

ตรวจสอบไฟล์ ตัวแปร
มักจะเป็นประโยชน์ในการจับคู่รูปแบบและตรวจสอบว่าเกิดขึ้นอีกครั้งในภายหลังใน
ไฟล์. สำหรับการทดสอบ codegen สิ่งนี้มีประโยชน์ในการอนุญาตการลงทะเบียนใดๆ แต่ให้ตรวจสอบว่า
register ถูกใช้อย่างสม่ำเสมอในภายหลัง เพื่อทำสิ่งนี้, ตรวจสอบไฟล์ อนุญาตให้ตัวแปรที่มีชื่อเป็น
กำหนดและแทนที่เป็นรูปแบบ นี่เป็นตัวอย่างง่ายๆ:

; ตรวจสอบ: test5:
; ตรวจสอบ: ไม่ [[ลงทะเบียน:%[az]+]]
; ตรวจสอบ: และw {{.*}}[[ลงทะเบียน]]

เช็คบรรทัดแรกตรงกับ regex %[az]+ แล้วจับเข้าตัวแปร ลงทะเบียน.
บรรทัดที่สองตรวจสอบว่าสิ่งที่อยู่ใน ลงทะเบียน เกิดขึ้นภายหลังในไฟล์หลังจาก an
"และ". ตรวจสอบไฟล์ การอ้างอิงตัวแปรมักจะมีอยู่ใน [[ ]] คู่และของพวกเขา
สามารถสร้างชื่อได้ด้วย regex [a-zA-Z][a-zA-Z0-9]*. ถ้าโคลอนตามชื่อ
จึงเป็นนิยามของตัวแปร มิฉะนั้นจะเป็นการใช้งาน

ตรวจสอบไฟล์ ตัวแปรสามารถกำหนดได้หลายครั้ง และใช้ค่าล่าสุดเสมอ
ตัวแปรยังสามารถใช้ภายหลังในบรรทัดเดียวกันกับที่กำหนดไว้ ตัวอย่างเช่น:

; ตรวจสอบ: op [[REG:r[0-9]+]], [[REG]]

จะมีประโยชน์ถ้าคุณต้องการตัวถูกดำเนินการของ op ให้เป็นทะเบียนเดิมไม่สน
ที่ลงทะเบียนมันเป็น

ตรวจสอบไฟล์ การแสดงออก
บางครั้งมีความจำเป็นต้องตรวจสอบผลลัพธ์ซึ่งอ้างอิงหมายเลขบรรทัดของไฟล์ที่ตรงกัน
เช่น เมื่อทำการทดสอบการวินิจฉัยคอมไพเลอร์ สิ่งนี้ทำให้เกิดความเปราะบางของการแข่งขัน
โครงสร้างไฟล์เป็น "ตรวจสอบ:" บรรทัดมีหมายเลขบรรทัดที่แน่นอนในไฟล์เดียวกันซึ่ง
ต้องอัปเดตทุกครั้งที่เปลี่ยนหมายเลขบรรทัดเนื่องจากการเติมหรือลบข้อความ

เพื่อรองรับกรณีนี้ FileCheck อนุญาตให้ใช้ [[@ไลน์]], [[@LINE+ ]],
[[@ไลน์- ]] การแสดงออกในรูปแบบ นิพจน์เหล่านี้ขยายเป็นจำนวน
เส้นที่มีรูปแบบอยู่ (พร้อมออฟเซ็ตจำนวนเต็มเสริม)

วิธีนี้สามารถใส่รูปแบบการจับคู่ไว้ใกล้กับเส้นทดสอบที่เกี่ยวข้องและรวมเส้นที่สัมพันธ์กัน
การอ้างอิงตัวเลข เช่น

// ตรวจสอบ: test.cpp:[[@LINE+4]]:6: ข้อผิดพลาด: คาดหวัง ';' หลังผู้ประกาศระดับบนสุด
// ตรวจสอบ-ถัดไป: {{^int a}}
// ตรวจสอบ-ถัดไป: {{^ \^}}
// ตรวจสอบ-ถัดไป: {{^ ;}}
int ก

ใช้ FileCheck-3.6 ออนไลน์โดยใช้บริการ onworks.net



โปรแกรมออนไลน์ Linux และ Windows ล่าสุด