Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / compiler-rt / test / sanitizer_common / TestCases / Posix / regex.cpp
blob59d9480b562f92d973d53a2e2eb99af241aace91
1 // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s
2 //
3 // UNSUPPORTED: darwin, target={{.*solaris.*}}
5 #include <assert.h>
6 #include <regex.h>
7 #include <stdio.h>
8 #include <stdlib.h>
10 #ifndef __arraycount
11 #define __arraycount(a) ((sizeof(a) / sizeof(a[0])))
12 #endif
14 void test_matched(const regex_t *preg, const char *string) {
15 int rv = regexec(preg, string, 0, NULL, 0);
16 if (!rv)
17 printf("%s: matched\n", string);
18 else if (rv == REG_NOMATCH)
19 printf("%s: not-matched\n", string);
20 else
21 abort();
24 void test_print_matches(const regex_t *preg, const char *string) {
25 regmatch_t rm[10];
26 int rv = regexec(preg, string, __arraycount(rm), rm, 0);
27 if (!rv) {
28 for (size_t i = 0; i < __arraycount(rm); i++) {
29 // This condition shall be simplified, but verify that the data fields
30 // are accessible.
31 if (rm[i].rm_so == -1 && rm[i].rm_eo == -1)
32 continue;
33 printf("matched[%zu]='%.*s'\n", i, (int)(rm[i].rm_eo - rm[i].rm_so),
34 string + rm[i].rm_so);
36 } else if (rv == REG_NOMATCH)
37 printf("%s: not-matched\n", string);
38 else
39 abort();
42 int main(void) {
43 printf("regex\n");
46 regex_t regex;
47 int rv = regcomp(&regex, "[[:upper:]]\\([[:upper:]]\\)", 0);
48 assert(!rv);
50 test_matched(&regex, "abc");
51 test_matched(&regex, "ABC");
53 test_print_matches(&regex, "ABC");
55 regfree(&regex);
59 regex_t regex;
60 int rv = regcomp(&regex, "[[:upp:]]", 0);
61 assert(rv);
63 char errbuf[1024];
64 regerror(rv, &regex, errbuf, sizeof errbuf);
65 printf("error: %s\n", errbuf);
67 regfree(&regex);
70 // CHECK: regex
71 // CHECK: abc: not-matched
72 // CHECK: ABC: matched
73 // CHECK: matched[0]='AB'
74 // CHECK: matched[1]='B'
75 // CHECK: error:{{.*}}
77 return 0;