англійськафранцузькаіспанська

Ad


Значок OnWorks

FileCheck-3.6 - онлайн у хмарі

Запустіть FileCheck-3.6 у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда FileCheck-3.6, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS.

ПРОГРАМА:

ІМ'Я


FileCheck - Гнучкий засіб перевірки файлів у відповідності з шаблонами

СИНТАКСИС


FileCheck відповідність імені файлу [--check-prefix=XXX] [--суворий пробіл]

ОПИС


FileCheck читає два файли (один зі стандартного введення, а другий зазначений у командному рядку)
і використовує один для перевірки іншого. Така поведінка особливо корисна для набору тестів,
який хоче перевірити, чи вихід якогось інструмента (наприклад ТОВ) містить очікуване
інформація (наприклад, movsd від esp або що там цікаво). Це схоже
до використання GREP, але він оптимізований для збігу кількох різних входів в одному файлі в a
конкретне замовлення.

Команда відповідність імені файлу file визначає файл, який містить шаблони для відповідності. Файл
to verify зчитується зі стандартного введення, якщо не --вхідний файл використовується варіант.

ВАРІАНТИ


-допомога Роздрукуйте підсумок параметрів командного рядка.

--чек-префікс префікс
FileCheck шукає вміст відповідність імені файлу щоб візерунки відповідали. За
за замовчуванням ці шаблони мають префікс "ПЕРЕВІРКА:". Якщо ви хочете використовувати a
різний префікс (наприклад, тому що один і той же вхідний файл перевіряє кілька різних
інструмент або параметри), --чек-префікс аргумент дозволяє вказати один або кілька
відповідні префікси. Кілька префіксів корисні для тестів, які можуть змінитися
різні варіанти виконання, але більшість рядків залишаються незмінними.

--вхідний файл ім'я файлу
Файл для перевірки (за замовчуванням stdin).

--суворий пробіл
За замовчуванням FileCheck канонілізує вхідні горизонтальні пробіли (пробіли та табуляції)
що змушує його ігнорувати ці відмінності (пробіл відповідатиме табуляції). The
--суворий пробіл argument вимикає цю поведінку. Кінцеві послідовності є
канонізований у стилі UNIX \n у всіх режимах.

--implicit-check-not чек-шаблон
Додає неявні негативні перевірки для зазначених шаблонів між позитивними перевірками.
Опція дозволяє писати суворіші тести, не заповнюючи їх ПЕРЕВІРКА-НЕs.

Наприклад, "--implicit-check-not увага:"може бути корисним при тестуванні діагностики
повідомлення від інструментів, які не мають параметра, подібного до брязкіт - перевірити. З цим
Опція FileCheck перевірить, що введені дані не містять попереджень, на які не поширюється дія
будь-який ПЕРЕВІРКА: моделі.

-версія
Покажіть номер версії цієї програми.

EXIT СТАТУС


If FileCheck перевіряє, що файл відповідає очікуваному вмісту, він виходить із 0.
Інакше, якщо ні, або якщо станеться помилка, він завершить роботу з ненульовим значенням.

Підручник


FileCheck зазвичай використовується з регресійних тестів LLVM, який викликається в рядку RUN
тест. Простий приклад використання FileCheck з рядка RUN виглядає так:

; ЗАПУСК: llvm-as < %s | llc -march=x86-64 | FileCheck %s

Цей синтаксис каже, щоб передати поточний файл ("%s") в llvm-як, передайте це в ТОВ, То
труба вихід ТОВ в FileCheck. Це означає, що FileCheck буде перевіряти його
стандартний вхід (вивід llc) проти вказаного аргументу імені файлу (оригінал .ll
файл, визначений "%s"). Щоб побачити, як це працює, давайте подивимося на решту .ll файл
(після рядка RUN):

визначити void @sub1(i32* %p, i32 %v) {
запис:
; ПЕРЕВІРКА: під1:
; ПЕРЕВІРКА: субл
%0 = хвостовий виклик i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
втратити чинність
}

визначити void @inc4(i64* %p) {
запис:
; ПЕРЕВІР: inc4:
; ПЕРЕВІРКА: incq
%0 = хвостовий виклик i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
втратити чинність
}

Тут ви можете побачити деякі "ПЕРЕВІРКА:" рядків, зазначених у коментарях. Тепер ви можете побачити, як файл
підводиться до llvm-як, То ТОВ, а виведення машинного коду – це те, що ми перевіряємо.
FileCheck перевіряє виведення машинного коду, щоб переконатися, що він відповідає тому, що "ПЕРЕВІРКА:"рядки
уточнюйте.

Синтаксис "ПЕРЕВІРКА:" рядки дуже проста: це фіксовані рядки, які повинні зустрічатися в
замовлення. За замовчуванням FileCheck ігнорує горизонтальні пробіли (наприклад, пробіл
дозволено відповідати вкладці), але в іншому випадку вміст "ПЕРЕВІРКА:" рядок необхідний для
точно збігається з певною речовиною в тестовому файлі.

Одна приємна річ у FileCheck (у порівнянні з grep) полягає в тому, що він дозволяє об’єднувати тестові випадки
об’єднати в логічні групи. Наприклад, тому що тест вище перевіряє
"під1:"І"inc4:" мітки, вони не збігаються, якщо немає "субл« між тими
етикетки. Якби він існував десь у файлі, це не зараховувалося б: "GREP субл"
відповідає, якщо "субл" існує в будь-якому місці файлу.

Команда FileCheck -чек-префікс варіант
Функція FileCheck -чек-префікс Опція дозволяє використовувати кілька тестових конфігурацій
один .ll файл. Це корисно в багатьох випадках, наприклад, для тестування різних
архітектурні варіанти с ТОВ. Ось простий приклад:

; ЗАПУСК: 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) nounwind {
%tmp1 = елемент вставки <4 x i32>; %tmp, i32 %s, i32 1
ret <4 x i32> %tmp1
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0

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

У цьому випадку ми перевіряємо, що ми отримуємо очікуване генерування коду як із 32-розрядними, так і з
Генерація 64-бітного коду.

Команда ПЕРЕВІРТЕ ДАЛІ: директива
Іноді ви хочете збігати рядки і хочете переконатися, що збіги відбуваються точно
послідовні рядки без інших ліній між ними. У цьому випадку можна використовувати "ПЕРЕВІРКА:"
and "ПЕРЕВІРТЕ ДАЛІ:" директиви для визначення цього. Якщо ви вказали користувацький префікс перевірки,
просто використовуй "-ДАЛІ:". Наприклад, щось на зразок цього працює так, як ви очікували:

визначити void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
%tmp3 = навантаження <2 x подвійне>* %A, вирівняти 16
%tmp7 = вставний елемент <2 x подвійний> undef, подвійний %B, i32 0
%tmp9 = тасувати вектор <2 x подвійний> %tmp3,
<2 x подвійний> %tmp7,
<2 x i32> < i32 0, i32 2 >
store <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)
; ПЕРЕВІРТЕ-ДАЛІ: повтор
}

"ПЕРЕВІРТЕ ДАЛІ:" директиви відхиляють введення, якщо між ними немає рівно одного нового рядка
і попередня директива. А "ПЕРЕВІРТЕ ДАЛІ:" не може бути першою директивою у файлі.

Команда ПЕРЕВІРКА-НЕ: директива
"ПЕРЕВІРКА-НЕ:Директива " використовується для перевірки того, що рядок не зустрічається між двома
матчі (або перед першим матчем, або після останнього матчу). Наприклад, щоб перевірити це
навантаження знімається шляхом перетворення, можна використовувати такий тест:

визначити i8 @coerce_offset0(i32 %V, i32* %P) {
магазин i32 %V, i32* %P

%P2 = бітова передача i32* %P до i8*
%P3 = getelementptr i8* %P2, i32 2

%A = навантаження i8* %P3
ret i8 %A
; ПЕРЕВІРТЕ: @coerce_offset0
; CHECK-NO: навантаження
; ПЕРЕВІРКА: ret i8
}

Команда CHECK-DAG: директива
Якщо потрібно зіставити рядки, які не зустрічаються в строго послідовному порядку,
"CHECK-DAG:" можна використовувати для перевірки між двома матчами (або перед першим матчем,
або після останнього матчу). Наприклад, clang випускає глобальні значення vtable у зворотному порядку. Використання
CHECK-DAG:, ми можемо зберігати чеки в природному порядку:

// ЗАПУСК: %clang_cc1 %s -emit-llvm -o - | FileCheck %s

struct Foo { virtual void method(); };
Foo f; // видавати vtable
// CHECK-DAG: @_ZTV3Foo =

struct Bar { virtual void method(); };
Бар б;
// CHECK-DAG: @_ZTV3Bar =

ПЕРЕВІРКА-НЕ: директиви можна змішувати з CHECK-DAG: директиви для виключення рядків між
навколишні CHECK-DAG: директиви. В результаті навколишні CHECK-DAG: директиви
не можна змінити порядок, тобто всі випадки збігаються CHECK-DAG: перед тим ПЕРЕВІРКА-НЕ: не можна
відставати від подій CHECK-DAG: після ПЕРЕВІРКА-НЕ:, Наприклад,

; ПРОВЕРКА: ДО
; ПЕРЕВІРКА-НЕ: НІ
; CHECK-DAG: ПІСЛЯ

Цей випадок відхилить вхідні рядки де ПЕРЕД виникає після ПІСЛЯ.

З захопленими змінними, CHECK-DAG: може відповідати дійсним топологічним упорядкуванням DAG
з ребрами від визначення змінної до її використання. Це корисно, наприклад, коли ваш
тестові приклади повинні відповідати різним вихідним послідовностям з планувальника інструкцій. Для
наприклад,

; CHECK-DAG: додати [[REG1:r[0-9]+]], r1, r2
; CHECK-DAG: додати [[REG2:r[0-9]+]], r3, r4
; ПЕРЕВІРТИ: mul r5, [[REG1]], [[REG2]]

У цьому випадку будь-який порядок з цих двох додавати будуть дозволені інструкції.

Якщо ви визначаєте та використання змінних у тому самому CHECK-DAG: блокувати, пам’ятайте, що
правило визначення може збігатися після його використання.

Так, наприклад, наведений нижче код передасть:

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

Хоча цей інший код не буде:

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

Хоча це може бути дуже корисним, це також небезпечно, тому що у разі реєстрації
послідовність, ви повинні мати строгий порядок (читати перед записом, копіювати перед використанням тощо). Якщо
визначення, яке шукає ваш тест, не відповідає (через помилку в компіляторі), it
може збігатися далі від використання та маскувати реальні помилки.

У цих випадках, щоб забезпечити виконання порядку, використовуйте директиву не-DAG між DAG-блоками.

Команда КОНТРОЛЬНА ЕТИКЕТКА: директива
Іноді у файлі, що містить кілька тестів, поділено на логічні блоки, один або кілька
ПЕРЕВІРКА: Директиви можуть ненавмисно стати успішними, збігаючи рядки в наступному блоці. У той час як an
Зазвичай в кінцевому підсумку генерується помилка, перевірка, позначена як спричиняє помилку, може і не бути
насправді мають будь-яке відношення до фактичного джерела проблеми.

Щоб отримати кращі повідомлення про помилки в цих випадках, "КОНТРОЛЬНА ЕТИКЕТКА:"Директива може
бути використаним. Лікується так само, як і звичайний ПЕРЕВІРКА директиви, за винятком того, що робить 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, [[ЗБЕРЕГТИ ЦЕ]]
%0 = біткова передача %struct.C* %це до %struct.A*
%call = хвостовий виклик %struct.A* @A_ctor_base(%struct.A* %0)
%1 = біткова передача %struct.C* %це до %struct.B*
%call2 = хвостовий виклик %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
ret %struct.C* %this
}

визначити %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
запис:
; КОНТРОЛЬНА МІТКА: D_ctor_base:

Застосування КОНТРОЛЬНА ЕТИКЕТКА: директиви в цьому випадку гарантує, що три ПЕРЕВІРКА: директиви
приймати лише рядки, що відповідають тілу @C_ctor_base функція, навіть якщо
шаблони відповідають рядкам, знайденим пізніше у файлі. Крім того, якщо один із цих трьох ПЕРЕВІРКА:
директив не вдається, FileCheck відновиться, перейшовши до наступного блоку, дозволивши декілька
помилки тестів, які можна виявити за один виклик.

Немає такої вимоги КОНТРОЛЬНА ЕТИКЕТКА: директиви містять рядки, які відповідають
фактичні синтаксичні мітки на вихідній або вихідній мові: вони повинні просто однозначно відповідати a
один рядок у файлі, що перевіряється.

КОНТРОЛЬНА ЕТИКЕТКА: директиви не можуть містити визначення чи використання змінних.

FileCheck Викрійки Узгодження синтаксис
"ПЕРЕВІРКА:"І"ПЕРЕВІРКА-НЕ:Обидві директиви використовують шаблон для відповідності. Для більшості випадків використання
FileCheck, фіксованого зіставлення рядків цілком достатньо. Для деяких речей більше
бажана гнучка форма відповідності. Щоб підтримати це, FileCheck дозволяє вказати
регулярні вирази у відповідних рядках, оточені подвійними дужками: {{yourregex}}.
Оскільки ми хочемо використовувати фіксовану відповідність рядків для більшості наших завдань, FileCheck має
розроблено для підтримки змішування та узгодження фіксованого збігу рядків із звичайними
вирази. Це дозволяє писати такі речі:

; ПЕРЕВІРТИ: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}

У цьому випадку буде дозволено будь-яке зміщення від регістру ESP, а також будь-який регістр xmm
допускається.

Оскільки регулярні вирази укладені в подвійні дужки, вони візуально відрізняються,
і вам не потрібно використовувати escape-символи в подвійних дужках, як це було б у C.
У рідкісних випадках, коли ви бажаєте зіставити подвійні дужки явно з вхідних даних, ви можете
використовувати щось потворне {{[{][{]}} як ваш шаблон.

FileCheck Змінні
Часто корисно зіставити шаблон, а потім перевірити, чи він повторюється пізніше
файл. Для тестів codegen це може бути корисно, щоб дозволити будь-який регістр, але переконайтеся, що це
register використовується послідовно. Зробити це, FileCheck дозволяє іменованим змінним бути
визначені та замінені на шаблони. Ось простий приклад:

; ПЕРЕВІРКА: test5:
; ПЕРЕВІРТИ: notw [[РЕЄСТРАЦІЯ:%[az]+]]
; ПЕРЕВІРТИ: і w {{.*}}[[РЕЄСТРАЦІЯ]]

Перший рядок перевірки відповідає регулярному виразу %[az]+ і захоплює його у змінну REGISTER.
Другий рядок перевіряє те, що є REGISTER зустрічається пізніше у файлі після an
"andw". FileCheck Посилання на змінні завжди містяться в [[ ]] пари та їх
імена можна утворити за допомогою регулярного виразу [a-zA-Z][a-zA-Z0-9]*. Якщо після імені стоїть двокрапка,
тоді це визначення змінної; інакше це використання.

FileCheck змінні можна визначати кілька разів, і використання завжди отримує останнє значення.
Змінні також можна використовувати пізніше в тому ж рядку, в якому вони були визначені. Наприклад:

; ПЕРЕВІРКА: op [[REG:r[0-9]+]], [[REG]]

Може бути корисним, якщо вам потрібні операнди op бути таким же реєстром, і байдуже
який саме реєстр.

FileCheck Вирази
Іноді потрібно перевірити вихідні дані, які посилаються на номери рядків у файлі відповідності,
наприклад, при тестуванні діагностики компілятора. Це вносить певну крихкість сірника
структура файлу, як "ПЕРЕВІРКА:" рядки містять абсолютні номери рядків у тому самому файлі, який
необхідно оновлювати щоразу, коли номери рядків змінюються через додавання або видалення тексту.

Для підтримки цього випадку FileCheck дозволяє використовувати [[@LINE]], [[@LINE+ ]],
[[@LINE- ]] вирази у візерунках. Ці вирази поширюються на ряд
рядок, де розташований шаблон (з необов’язковим цілочисельним зміщенням).

Таким чином, шаблони відповідності можуть бути розміщені біля відповідних тестових ліній і включати відносну лінію
числові посилання, наприклад:

// ПЕРЕВІРКА: test.cpp:[[@LINE+4]]:6: помилка: очікуваний ';' після декларатора верхнього рівня
// ПЕРЕВІРТЕ ДАЛІ: {{^int a}}
// ПЕРЕВІРТЕ ДАЛІ: {{^ \^}}
// ПЕРЕВІРТЕ ДАЛІ: {{^ ;}}
int a

Використовуйте FileCheck-3.6 онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    Плагін Eclipse Tomcat
    Плагін Eclipse Tomcat
    Надає плагін Eclipse Tomcat
    проста інтеграція сервлета tomcat
    контейнер для розробки java
    веб-додатків. Ви можете приєднатися до нас для
    обговорення...
    Завантажте плагін Eclipse Tomcat
  • 2
    WebTorrent робочий стіл
    WebTorrent робочий стіл
    WebTorrent Desktop призначений для потокової передачі
    торренти на Mac, Windows або Linux. Це
    підключається до BitTorrent і
    Однолітки WebTorrent. Тепер немає
    треба чекати...
    Завантажити WebTorrent Desktop
  • 3
    GenX
    GenX
    GenX – це наукова програма для вдосконалення
    відбиваюча здатність рентгенівських променів, нейтрон
    відбивна здатність і поверхневий рентген
    дифракційні дані за допомогою диференціала
    еволюційний алгоритм...
    Завантажте GenX
  • 4
    pspp4windows
    pspp4windows
    PSPP — програма для статистики
    аналіз вибіркових даних. Це безкоштовно
    заміна на пропрієтарну програму
    SPSS. PSPP має як текстові, так і
    графічний нас...
    Завантажте pspp4windows
  • 5
    Розширення Git
    Розширення Git
    Git Extensions — це окремий інструмент інтерфейсу користувача
    для керування сховищами Git. Це також
    інтегрується з Провідником Windows і
    Microsoft Visual Studio
    (2015/2017/2019). Ч...
    Завантажте розширення Git
  • 6
    eSpeak: синтез мови
    eSpeak: синтез мови
    Система синтезу мовлення для англійської та
    багато інших мов. Компактний розмір с
    чітка, але штучна вимова.
    Доступна як програма командного рядка з
    багато ...
    Завантажте eSpeak: синтез мовлення
  • Детальніше »

Команди Linux

Ad