llvm-capstone/clang/test/utils/update_cc_test_checks/check-globals.test
Henrik G. Olsson e6eda66cbc
Recommit changes to global checks (#71171)
Recommits the changes from https://reviews.llvm.org/D148216.
Explicitly named globals are now matched literally, instead of emitting
a capture group for the name. This resolves #70047.
Metadata and annotations, on the other hand, are captured and matched
against by default, since their identifiers are not stable.

The reasons for revert (#63746) have been fixed:
The first issue, that of duplicated checkers, has already been resolved
in #70050.
This PR resolves the second issue listed in #63746, regarding the order
of named and unnamed globals. This is fixed by recording the index of
substrings containing global values, and sorting the checks according to
that index before emitting them. This results in global value checks
being emitted in the order they were seen instead of being grouped
separately.
2023-11-13 14:45:27 +01:00

85 lines
2.9 KiB
Plaintext

RUN: rm -rf %t && mkdir %t
# Check --check-globals all in normal mode and in --include-generated-funcs mode.
RUN: cp %S/Inputs/check-globals.c %t/norm.c
RUN: %update_cc_test_checks %t/norm.c --check-globals all
RUN: FileCheck %s --input-file=%t/norm.c --match-full-lines -strict-whitespace \
RUN: -check-prefixes=BOTH,NRM
RUN: cp %S/Inputs/check-globals.c %t/igf.c
RUN: %update_cc_test_checks %t/igf.c --check-globals all --include-generated-funcs
RUN: FileCheck %s --input-file=%t/igf.c --match-full-lines -strict-whitespace \
RUN: -check-prefixes=BOTH,IGF
# Check that repeating doesn't change it, such as duplicating '//.' occurrences.
RUN: cp %t/norm.c %t/norm-again.c
RUN: %update_cc_test_checks %t/norm-again.c --check-globals all
RUN: diff -u %t/norm.c %t/norm-again.c
RUN: rm %t/norm-again.c
RUN: cp %t/igf.c %t/igf-again.c
RUN: %update_cc_test_checks %t/igf-again.c --check-globals all \
RUN: --include-generated-funcs
RUN: diff -u %t/igf.c %t/igf-again.c
RUN: rm %t/igf-again.c
# Check that the generated directives actually work correctly. For example,
# they're not in the wrong order.
RUN: cp %S/Inputs/lit.cfg.example %t/lit.cfg
# Show lit failures while avoiding confusing FileCheck input dump nesting.
RUN: %lit %t
# Lit was successful. Sanity-check the results with deterministic test order.
RUN: rm %t/.lit_test_times.txt
RUN: %lit %t 2>&1 | FileCheck -check-prefix=LIT-RUN %s
END.
BOTH-NOT:{{.}}
NRM:// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals
IGF:// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals --include-generated-funcs
BOTH-NEXT:// {{.*}}
BOTH-NEXT:// RUN: true
BOTH-NEXT:// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s
BOTH-EMPTY:
IGF-NEXT:void foo(void) {
IGF-NEXT: static int i, j;
IGF-NEXT:}
IGF-NEXT:void bar(void) {
IGF-NEXT: static int i, j;
IGF-NEXT:}
BOTH-NEXT://.
BOTH-NEXT:// CHECK: @foo.i = internal global i32 0, align 4
BOTH-NEXT:// CHECK: @foo.j = internal global i32 0, align 4
BOTH-NEXT:// CHECK: @bar.i = internal global i32 0, align 4
BOTH-NEXT:// CHECK: @bar.j = internal global i32 0, align 4
BOTH-NEXT://.
BOTH-NEXT:// CHECK-LABEL: @foo(
BOTH-NEXT:// CHECK-NEXT: entry:
BOTH-NEXT:// CHECK-NEXT: ret void
BOTH-NEXT://
NRM-NEXT:void foo(void) {
NRM-NEXT: static int i, j;
NRM-NEXT:}
IGF-NEXT://
BOTH-NEXT:// CHECK-LABEL: @bar(
BOTH-NEXT:// CHECK-NEXT: entry:
BOTH-NEXT:// CHECK-NEXT: ret void
BOTH-NEXT://
NRM-NEXT:void bar(void) {
NRM-NEXT: static int i, j;
NRM-NEXT:}
BOTH-NEXT://.
BOTH-NEXT:// CHECK: attributes {{.*}}
BOTH-NEXT://.
BOTH-NEXT:// CHECK: {{\[\[META0:!\[0-9\]\+\]\]}} = {{.*}}
BOTH-NEXT:// CHECK: {{\[\[META1:!\[0-9\]\+\]\]}} = {{.*}}
BOTH-NEXT://.
BOTH-NOT:{{.}}
LIT-RUN: Testing: 2 tests
LIT-RUN: PASS: {{.*}} igf.c
LIT-RUN: PASS: {{.*}} norm.c