İngilizceFransızcaİspanyolca

Ad


OnWorks favicon'u

FileCheck-3.6 - Bulutta Çevrimiçi

Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü üzerinden OnWorks ücretsiz barındırma sağlayıcısında FileCheck-3.6'i çalıştırın

Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen FileCheck-3.6 komutudur.

Program:

ADI


FileCheck - Esnek desen eşleştirme dosya doğrulayıcı

SİNOPSİS


Dosya kontrolü eşleşme-dosya adı [--check-prefix=XXX] [--katı-boşluk]

TANIM


Dosya kontrolü iki dosya okur (biri standart girdiden, diğeri komut satırında belirtilir)
ve birini diğerini doğrulamak için kullanır. Bu davranış özellikle test takımı için kullanışlıdır.
bu, bazı araçların çıktısının (örn. llc) beklenen içerir
bilgi (örneğin, esp'den bir movsd veya ilginç olan herhangi bir şey). Bu benzer
kullanmak grep, ancak tek bir dosyada birden çok farklı girişi eşleştirmek için optimize edilmiştir.
özel sipariş.

The eşleşme-dosya adı file, eşleşecek kalıpları içeren dosyayı belirtir. Dosya
doğrulamak için standart girdiden okunur --giriş dosyası seçeneği kullanılır.

SEÇENEKLER


-Yardım Komut satırı seçeneklerinin bir özetini yazdırın.

--check-önek önek
FileCheck içeriğini arar eşleşme-dosya adı desenlerin eşleşmesi için. Tarafından
varsayılan olarak, bu desenlerin ön eki "KONTROL:". Bir
farklı önek (örneğin, aynı girdi dosyası birden çok farklı
araç veya seçenekler), --check-önek argüman bir veya daha fazla belirtmenize izin verir
eşleşecek önekler. Birden çok önek, değişebilecek testler için kullanışlıdır.
farklı çalıştırma seçenekleri, ancak çoğu satır aynı kalır.

--giriş dosyası Dosya
Kontrol edilecek dosya (varsayılanı stdin'dir).

--katı-boşluk
Varsayılan olarak, FileCheck giriş yatay boşluklarını (boşluklar ve sekmeler) kurallı hale getirir
bu, bu farklılıkları görmezden gelmesine neden olur (bir boşluk bir sekmeyle eşleşir). NS
--katı-boşluk argüman bu davranışı devre dışı bırakır. Satır sonu dizileri
UNIX stiline standartlaştırılmış \n tüm modlarda.

--implicit-check-not Deseni kontrol et
Pozitif kontroller arasında belirtilen kalıplar için örtük negatif kontroller ekler.
Bu seçenek, onları doldurmadan daha katı testler yazmaya izin verir. KONTROL-DEĞİLs.

Örneğin, "--implicit-check-not uyarı:" tanıyı test ederken faydalı olabilir
benzer bir seçeneğe sahip olmayan araçlardan gelen mesajlar çınlama -Doğrulayın. Bununla
FileCheck seçeneği, girişin aşağıdakiler kapsamında olmayan uyarıları içermediğini doğrulayacaktır.
herhangi KONTROL: desenler.

-version
Bu programın sürüm numarasını göster.

EXIT DURUMU


If Dosya kontrolü dosyanın beklenen içerikle eşleştiğini doğrular, 0 ile çıkar.
Aksi takdirde, değilse veya bir hata oluşursa sıfır olmayan bir değerle çıkacaktır.

TUTORIAL


FileCheck, tipik olarak, RUN satırında çağrılan LLVM regresyon testlerinden kullanılır.
test. Bir RUN satırından FileCheck kullanmanın basit bir örneği şöyle görünür:

; ÇALIŞTIR: llvm-as < %s | llc -mart=x86-64 | Dosya Kontrolü %s

Bu sözdizimi, geçerli dosyayı yönlendirmeyi söylüyor ("%s") içine llvm-as, içine boru llc, Daha sonra
çıkış borusu llc içine Dosya kontrolü. Bu, FileCheck'in kendi bilgilerini doğrulayacağı anlamına gelir.
belirtilen dosya adı argümanına (orijinal .LL
" ile belirtilen dosya%s"). Bunun nasıl çalıştığını görmek için, geri kalanına bakalım. .LL dosya
(ÇALIŞTIR satırından sonra):

tanım boşluğu @sub1(i32* %p, i32 %v) {
entry:
; KONTROL EDİN: alt1:
; KONTROL ET: alt
%0 = kuyruk çağrısı i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
boşluk
}

tanım boşluğu @inc4(i64* %p) {
entry:
; KONTROL ET: inc4:
; KONTROL ET: incq
%0 = kuyruk çağrısı i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
boşluk
}

Burada bazılarını görebilirsiniz"KONTROL:" satırları yorumlarda belirtilmiş. Artık dosyanın nasıl olduğunu görebilirsiniz.
içine boru llvm-as, Daha sonra llc, ve makine kodu çıktısı doğruladığımız şeydir.
FileCheck, " ile eşleştiğini doğrulamak için makine kodu çıktısını kontrol eder.KONTROL:" çizgiler
belirtin.

Sözdizimi "KONTROL:" satırlar çok basittir: bunlar, içinde gerçekleşmesi gereken sabit dizilerdir.
Emir. FileCheck, varsayılan olarak yatay boşluk farklılıklarını yok sayar (örneğin bir boşluk
bir sekmeyle eşleşmesine izin verilir), aksi takdirde "KONTROL:" satırı için gereklidir
test dosyasındaki bir şeyi tam olarak eşleştirin.

FileCheck ile ilgili güzel bir şey (grep ile karşılaştırıldığında), test senaryolarının birleştirilmesine izin vermesidir.
mantıksal gruplara ayrılır. Örneğin, yukarıdaki test,
"alt1:" ve "Inc4:" etiketler, olmadığı sürece eşleşmeyecektir "alt"bunların arasında
etiketler. Dosyada başka bir yerde olsaydı, bu sayılmazdı: "grep alt"
eşleşirse "alt" dosyanın herhangi bir yerinde var.

The Dosya kontrolü -kontrol öneki seçenek
Dosya Kontrolü -kontrol öneki seçeneği, birden fazla test yapılandırmasının
bir .LL dosya. Bu, örneğin farklı testlerin yapılması gibi birçok durumda yararlıdır.
mimari varyantlar llc. İşte basit bir örnek:

; ÇALIŞTIR: llvm-as < %s | llc -mtriple=i686-elma-darwin9 -mattr=sse41 \
; ÇALIŞTIR: | FileCheck %s -check-prefix=X32
; ÇALIŞTIR: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
; ÇALIŞTIR: | FileCheck %s -check-prefix=X64

tanımla <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
%tmp1 = ekleme öğesi <4 x i32>; %tmp, i32 %s, i32 1
geri <4 x i32> %tmp1
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0

; X64: pinsrd_1:
; X64: pinsrd $1, %edi, %xmm0
}

Bu durumda, beklenen kod üretimini hem 32 bit hem de
64 bit kod üretimi.

The KONTROL-SONRAKİ: Direktifler
Bazen satırları eşleştirmek istersiniz ve eşleşmelerin tam olarak gerçekleştiğini doğrulamak istersiniz.
aralarında başka satır olmayan ardışık satırlar. Bu durumda, "KONTROL:"
ve "KONTROL-SONRAKİ:" yönergeleri bunu belirtmek için. Özel bir kontrol öneki belirlediyseniz,
sadece kullan "-SONRAKİ:". Örneğin, bunun gibi bir şey beklediğiniz gibi çalışır:

tanım boşluğu @t2(<2 x çift>* %r, <2 x çift>* %A, çift %B) {
%tmp3 = <2 x çift>* %A yükle, 16 hizala
%tmp7 = ekleme öğesi <2 x çift> tanımsız, çift %B, i32 0
%tmp9 = shufflevektör <2 x çift> %tmp3,
<2 x çift> %tmp7,
<2 x i32> < i32 0, i32 2 >
<2 x çift> %tmp9, <2 x çift>* %r depola, 16 hizala
boşluk

; KONTROL ET: t2:
; KONTROL ET: movl 8(%esp), %eax
; KONTROL-SONRAKİ: movapd (%eax), %xmm0
; KONTROL-SONRAKİ: movhpd 12(%esp), %xmm0
; KONTROL-SONRAKİ: movl 4(%esp), %eax
; KONTROL-SONRAKİ: movapd %xmm0, (%eax)
; KONTROL-SONRAKİ: ret
}

"KONTROL-SONRAKİ:" yönergeleri, aralarında tam olarak bir yeni satır olmadığı sürece girişi reddeder
ve önceki yönerge. A "KONTROL-SONRAKİ:" bir dosyadaki ilk yönerge olamaz.

The KONTROL ETMEYİN: Direktifler
"KONTROL ETMEYİN:" yönergesi, iki dizi arasında bir dize oluşmadığını doğrulamak için kullanılır.
maçlar (veya ilk maçtan önce veya son maçtan sonra). Örneğin, bunu doğrulamak için
bir yük bir dönüşümle kaldırılırsa, bunun gibi bir test kullanılabilir:

tanımla i8 @coerce_offset0(i32 %V, i32* %P) {
i32 %V, i32* %P'yi saklayın

%P2 = bit yayını i32* %P'den i8'e*
%P3 = getelementptr i8* %P2, i32 2

%A = i8* %P3 yükle
geri i8 %A
; KONTROL ET: @coerce_offset0
; KONTROL ETMEYİN: yük
; KONTROL ET: ret i8
}

The KONTROL-DAG: Direktifler
Kesin olarak sıralı bir sırayla oluşmayan dizeleri eşleştirmek gerekirse,
"KONTROL-DAG:" iki eşleşme arasında (veya ilk eşleşmeden önce) bunları doğrulamak için kullanılabilir.
veya son maçtan sonra). Örneğin, clang vtable globallerini ters sırada yayar. kullanma
KONTROL-DAG:, çekleri doğal düzende tutabiliriz:

// ÇALIŞTIR: %clang_cc1 %s -emit-llvm -o - | Dosya Kontrolü %s

struct Foo { sanal boşluk yöntemi(); };
Foo f; // vtable yayar
// KONTROL-DAG: @_ZTV3Foo =

struct Bar { sanal boşluk yöntemi(); };
çubuk b;
// KONTROL-DAG: @_ZTV3Bar =

KONTROL ETMEYİN: direktiflerle karıştırılabilir. KONTROL-DAG: arasındaki dizeleri hariç tutmak için yönergeler
çevreleyen KONTROL-DAG: direktifler. Sonuç olarak, çevredeki KONTROL-DAG: direktifler
yeniden sıralanamaz, yani eşleşen tüm oluşumlar KONTROL-DAG: önce KONTROL ETMEYİN: yapmamalısın
eşleşen olayların gerisinde kalmak KONTROL-DAG: sonra KONTROL ETMEYİN:. Örneğin,

; ÇEK-DAG: ÖNCE
; KONTROL-NOT: DEĞİL
; ÇEK-DAG: SONRA

Bu durum, giriş dizelerini reddedecek ÖNCE sonra meydana gelir SONRA.

Yakalanan değişkenlerle, KONTROL-DAG: bir DAG'nin geçerli topolojik sıralamalarını eşleştirebilir
bir değişkenin tanımından kullanımına kadar kenarları olan. Bu yararlıdır, örneğin,
test senaryolarının talimat planlayıcıdan farklı çıktı dizileriyle eşleşmesi gerekir. İçin
örnek,

; CHECK-DAG: [[REG1:r[0-9]+]], r1, r2 ekleyin
; CHECK-DAG: [[REG2:r[0-9]+]], r3, r4 ekleyin
; KONTROL EDİN: çoklu r5, [[REG1]], [[REG2]]

Bu durumda, bu ikisinin herhangi bir sırası eklemek talimatlara izin verilecektir.

eğer tanımlıyorsan ve değişkenleri aynı şekilde kullanmak KONTROL-DAG: blok, unutmayın
tanım kuralı eşleşebilir sonra kullanımı.

Yani, örneğin, aşağıdaki kod geçecektir:

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

Bu diğer kod olsa da, olmaz:

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

Bu çok yararlı olsa da tehlikelidir, çünkü kayıt durumunda
güçlü bir sıraya sahip olmalısınız (yazmadan önce okuyun, kullanmadan önce kopyalayın, vb.). Eğer
testinizin aradığı tanım eşleşmiyor (derleyicideki bir hata nedeniyle),
kullanımdan daha uzakta eşleşebilir ve gerçek hataları maskeleyebilir.

Bu durumlarda, emri uygulamak için DAG blokları arasında DAG olmayan bir yönerge kullanın.

The KONTROL ETİKET: Direktifler
Bazen mantıksal bloklara bölünmüş birden fazla test içeren bir dosyada, bir veya daha fazla
KONTROL: yönergeler, sonraki bir blokta satırları eşleştirerek istemeden başarılı olabilir. iken
hata genellikle eninde sonunda üretilir, hataya neden olarak işaretlenen kontrol,
aslında sorunun asıl kaynağıyla herhangi bir ilişki içindedir.

Bu durumlarda daha iyi hata mesajları üretebilmek için "KONTROL ETİKET:"yönerge olabilir
kullanılacak. Normal bir şekilde aynı şekilde tedavi edilir ARA FileCheck'in yapması dışında yönerge
direktif tarafından eşleştirilen bir satırın aynı zamanda tarafından da eşleştirilemeyeceğine dair ek bir varsayım
başka bir çek mevcut eşleşme-dosya adı; bu hatlar için kullanılmak üzere tasarlanmıştır
etiketleri veya diğer benzersiz tanımlayıcıları içeren. Kavramsal olarak, varlığı KONTROL ETİKET
girdi akışını, her biri bağımsız olarak işlenen ayrı bloklara böler,
önlemek KONTROL: Bir blokta başka bir bloktaki bir satırla eşleşen yönerge. Örneğin,

%struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
entry:
; KONTROL ETİKETİ: C_ctor_base:
; KONTROL ET: mov [[KAYDET:r[0-9]+]], r0
; DENETLEYİN: bl A_ctor_base
; KONTROL ET: hareket r0, [[KAYDET]]
%0 = bit yayını %struct.C* %bunu %struct.A*'ya
%call = kuyruk çağrısı %struct.A* @A_ctor_base(%struct.A* %0)
%1 = bit yayını %struct.C* %bunu %struct.B*'ye
%call2 = kuyruk çağrısı %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
ret %struct.C* %bu
}

tanımla %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
entry:
; KONTROL ETİKETİ: D_ctor_base:

Kullanılması KONTROL ETİKET: Bu durumda direktifler, üç KONTROL: direktifler
yalnızca gövdeye karşılık gelen satırları kabul edin. @C_ctor_base işlev görse bile,
desenler dosyada daha sonra bulunan satırlarla eşleşir. Ayrıca, eğer bu üçünden biri KONTROL:
yönergeler başarısız olursa, FileCheck bir sonraki bloğa devam ederek kurtaracak ve birden çok
tek bir çağrıda tespit edilecek test hataları.

öyle bir şart yok KONTROL ETİKET: yönergeler, karşılık gelen dizeleri içerir
bir kaynak veya çıktı dilindeki gerçek sözdizimsel etiketler: bir
doğrulanmakta olan dosyadaki tek satır.

KONTROL ETİKET: direktifler değişken tanımları veya kullanımları içeremez.

Dosya kontrolü model Uygun Sözdizimi
"KONTROL:" ve "KONTROL ETMEYİN:" yönergelerinin her ikisi de eşleşecek bir kalıp alır.
FileCheck, sabit dize eşleştirmesi tamamen yeterlidir. Bazı şeyler için daha
esnek bir eşleştirme şekli istenmektedir. Bunu desteklemek için FileCheck, şunları belirtmenize izin verir:
eşleşen dizelerde çift parantez ile çevrelenmiş normal ifadeler: {{yourregex}}.
Yaptığımız şeylerin çoğu için sabit dizi eşleştirmesi kullanmak istediğimizden, FileCheck
düzenli dize eşleştirmesini karıştırmayı ve eşleştirmeyi desteklemek için tasarlanmıştır
ifade. Bu, aşağıdaki gibi şeyler yazmanıza izin verir:

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

Bu durumda, ESP kaydından herhangi bir sapmaya izin verilir ve herhangi bir xmm kaydına izin verilir.
izin.

Normal ifadeler çift parantez içine alındığından görsel olarak farklıdırlar.
ve C'de yaptığınız gibi çift parantez içinde kaçış karakterlerini kullanmanıza gerek yoktur.
Nadir durumlarda, girişten çift parantezleri açıkça eşleştirmek istediğinizde, şunları yapabilirsiniz:
gibi çirkin bir şey kullan {{[{][{]}} senin desen olarak.

Dosya kontrolü Değişkenler
Bir kalıbı eşleştirmek ve ardından daha sonra tekrar oluştuğunu doğrulamak genellikle yararlıdır.
dosya. Codegen testleri için bu, herhangi bir kayda izin vermek için faydalı olabilir, ancak bunun doğrulayın.
register daha sonra sürekli olarak kullanılır. Bunu yapmak için, Dosya kontrolü adlandırılmış değişkenlerin olmasına izin verir
tanımlanmış ve kalıplara ikame edilmiştir. İşte basit bir örnek:

; KONTROL ET: test5:
; KONTROL ET: şimdi [[KAYIT:%[az]+]]
; KONTROL ET: vew {{.*}}[[KAYDOL]]

İlk kontrol satırı bir normal ifadeyle eşleşir %[az]+ ve onu değişkene yakalar KAYIT.
İkinci satır, içinde ne olduğunu doğrular. KAYIT dosyada daha sonra oluşur
"vew". Dosya kontrolü değişken referansları her zaman içinde bulunur [[ ]] çiftler ve onların
isimler regex ile oluşturulabilir [a-zA-Z][a-zA-Z0-9]*. Adın ardından iki nokta üst üste işareti gelirse,
o zaman değişkenin tanımıdır; aksi takdirde, bu bir kullanımdır.

Dosya kontrolü değişkenler birden çok kez tanımlanabilir ve kullanımlar her zaman en son değeri alır.
Değişkenler daha sonra tanımlandıkları satırda da kullanılabilirler. Örneğin:

; KONTROL ET: op [[REG:r[0-9]+]], [[REG]]

İşlenenleri istiyorsanız yararlı olabilir op aynı kayıt olmak ve umrumda değil
tam olarak hangi kayıt olduğunu.

Dosya kontrolü İfadeler
Bazen, eşleşme dosyasının satır numaralarını ifade eden çıktıyı doğrulamaya ihtiyaç vardır,
örneğin derleyici tanılamayı test ederken. Bu, maçın belirli bir kırılganlığını ortaya koyuyor
dosya yapısı, "KONTROL:" satırlar, aynı dosyada mutlak satır numaraları içerir;
metin ekleme veya silme nedeniyle satır numaraları değiştiğinde güncellenmelidir.

Bu durumu desteklemek için FileCheck, [[@HAT]], [[@LINE+ ]],
[[@HAT- ]] desenlerdeki ifadeler. Bu ifadeler bir dizi
bir desenin bulunduğu çizgi (isteğe bağlı bir tamsayı ofseti ile).

Bu şekilde, eşleşme kalıpları ilgili test hatlarının yakınına yerleştirilebilir ve ilgili satırları içerebilir.
numara referansları, örneğin:

// KONTROL: test.cpp:[[@LINE+4]]:6: hata: bekleniyor ';' üst düzey deklaratörden sonra
// KONTROL-SONRAKİ: {{^int a}}
// KONTROL-SONRAKİ: {{^ \^}}
// KONTROL-SONRAKİ: {{^ ;}}
int bir

Onworks.net hizmetlerini kullanarak FileCheck-3.6'i çevrimiçi kullanın


Ücretsiz Sunucular ve İş İstasyonları

Windows ve Linux uygulamalarını indirin

Linux komutları

Ad