Clang Project

clang_source_code/test/Driver/autocomplete.c
1// Test for the --autocompletion flag, which is an API used for shell
2// autocompletion. You may have to update tests in this file when you
3// add/modify flags, change HelpTexts or the values of some flags.
4
5// Some corner cases.
6// Just test that this doesn't crash:
7// RUN: %clang --autocomplete=
8// RUN: %clang --autocomplete=,
9// RUN: %clang --autocomplete==
10// RUN: %clang --autocomplete=,,
11// RUN: %clang --autocomplete=-
12
13// RUN: %clang --autocomplete=-fsyn | FileCheck %s -check-prefix=FSYN
14// FSYN: -fsyntax-only
15// RUN: %clang --autocomplete=-std | FileCheck %s -check-prefix=STD
16// STD: -std= Language standard to compile for
17// RUN: %clang --autocomplete=foo | FileCheck %s -check-prefix=FOO
18// FOO-NOT: foo
19// RUN: %clang --autocomplete=-stdlib=,l | FileCheck %s -check-prefix=STDLIB
20// STDLIB: libc++
21// STDLIB-NEXT: libstdc++
22// RUN: %clang --autocomplete=-stdlib= | FileCheck %s -check-prefix=STDLIBALL
23// STDLIBALL: libc++
24// STDLIBALL-NEXT: libstdc++
25// STDLIBALL-NEXT: platform
26// RUN: %clang --autocomplete=-meabi,d | FileCheck %s -check-prefix=MEABI
27// MEABI: default
28// RUN: %clang --autocomplete=-meabi, | FileCheck %s -check-prefix=MEABIALL
29// RUN: %clang --autocomplete=-meabi | FileCheck %s -check-prefix=MEABIALL
30// MEABIALL: 4
31// MEABIALL-NEXT: 5
32// MEABIALL-NEXT: default
33// MEABIALL-NEXT: gnu
34// RUN: %clang --autocomplete=-cl-std=,CL2 | FileCheck %s -check-prefix=CLSTD
35// CLSTD: CL2.0
36// RUN: %clang --autocomplete=-cl-std= | FileCheck %s -check-prefix=CLSTDALL
37// CLSTDALL: c++
38// CLSTDALL-NEXT: cl
39// CLSTDALL-NEXT: CL
40// CLSTDALL-NEXT: cl1.1
41// CLSTDALL-NEXT: CL1.1
42// CLSTDALL-NEXT: cl1.2
43// CLSTDALL-NEXT: CL1.2
44// CLSTDALL-NEXT: cl2.0
45// CLSTDALL-NEXT: CL2.0
46// RUN: %clang --autocomplete=-fno-sanitize-coverage=,f | FileCheck %s -check-prefix=FNOSANICOVER
47// FNOSANICOVER: func
48// RUN: %clang --autocomplete=-fno-sanitize-coverage= | FileCheck %s -check-prefix=FNOSANICOVERALL
49// FNOSANICOVERALL: 8bit-counters
50// FNOSANICOVERALL-NEXT: bb
51// FNOSANICOVERALL-NEXT: edge
52// FNOSANICOVERALL-NEXT: func
53// FNOSANICOVERALL-NEXT: indirect-calls
54// FNOSANICOVERALL-NEXT: inline-8bit-counters
55// FNOSANICOVERALL-NEXT: no-prune
56// FNOSANICOVERALL-NEXT: trace-bb
57// FNOSANICOVERALL-NEXT: trace-cmp
58// FNOSANICOVERALL-NEXT: trace-div
59// FNOSANICOVERALL-NEXT: trace-gep
60// FNOSANICOVERALL-NEXT: trace-pc
61// FNOSANICOVERALL-NEXT: trace-pc-guard
62// RUN: %clang --autocomplete=-ffp-contract= | FileCheck %s -check-prefix=FFPALL
63// FFPALL: fast
64// FFPALL-NEXT: off
65// FFPALL-NEXT: on
66// RUN: %clang --autocomplete=-flto= | FileCheck %s -check-prefix=FLTOALL
67// FLTOALL: full
68// FLTOALL-NEXT: thin
69// RUN: %clang --autocomplete=-fveclib= | FileCheck %s -check-prefix=FVECLIBALL
70// FVECLIBALL: Accelerate
71// FVECLIBALL-NEXT: none
72// FVECLIBALL-NEXT: SVML
73// RUN: %clang --autocomplete=-fshow-overloads= | FileCheck %s -check-prefix=FSOVERALL
74// FSOVERALL: all
75// FSOVERALL-NEXT: best
76// RUN: %clang --autocomplete=-fvisibility= | FileCheck %s -check-prefix=FVISIBILITYALL
77// FVISIBILITYALL: default
78// FVISIBILITYALL-NEXT: hidden
79// RUN: %clang --autocomplete=-mfloat-abi= | FileCheck %s -check-prefix=MFLOATABIALL
80// MFLOATABIALL: hard
81// MFLOATABIALL-NEXT: soft
82// MFLOATABIALL-NEXT: softfp
83// RUN: %clang --autocomplete=-mthread-model | FileCheck %s -check-prefix=MTHREADMODELALL
84// MTHREADMODELALL: posix
85// MTHREADMODELALL-NEXT: single
86// RUN: %clang --autocomplete=-mrelocation-model | FileCheck %s -check-prefix=MRELOCMODELALL
87// MRELOCMODELALL: dynamic-no-pic
88// MRELOCMODELALL-NEXT: pic
89// MRELOCMODELALL-NEXT: ropi
90// MRELOCMODELALL-NEXT: ropi-rwpi
91// MRELOCMODELALL-NEXT: rwpi
92// MRELOCMODELALL-NEXT: static
93// RUN: %clang --autocomplete=-Wma | FileCheck %s -check-prefix=WARNING
94// WARNING: -Wmacro-redefined
95// WARNING-NEXT: -Wmain
96// WARNING-NEXT: -Wmain-return-type
97// WARNING-NEXT: -Wmalformed-warning-check
98// WARNING-NEXT: -Wmany-braces-around-scalar-init
99// WARNING-NEXT: -Wmax-unsigned-zero
100// RUN: %clang --autocomplete=-Wno-invalid-pp- | FileCheck %s -check-prefix=NOWARNING
101// NOWARNING: -Wno-invalid-pp-token
102// RUN: %clang --autocomplete=-analyzer-checker | FileCheck %s -check-prefix=ANALYZER
103// ANALYZER: unix.Malloc
104// RUN: %clang --autocomplete=-std= | FileCheck %s -check-prefix=STDVAL
105// STDVAL: c99
106//
107// Clang shouldn't autocomplete CC1 options unless -cc1 or -Xclang were provided
108// RUN: %clang --autocomplete=-mrelocation-mode | FileCheck %s -check-prefix=MRELOCMODEL_CLANG
109// MRELOCMODEL_CLANG-NOT: -mrelocation-model
110// RUN: %clang --autocomplete=-Xclang,-mrelocation-mode | FileCheck %s -check-prefix=MRELOCMODEL_CC1
111// RUN: %clang --autocomplete=-cc1,-mrelocation-mode | FileCheck %s -check-prefix=MRELOCMODEL_CC1
112// MRELOCMODEL_CC1: -mrelocation-model
113// Make sure it ignores passed flags unlesss they are -Xclang or -cc1
114// RUN: %clang --autocomplete=foo,bar,,-fsyn | FileCheck %s -check-prefix=FSYN-CORON
115// FSYN-CORON: -fsyntax-only
116// Check if they can autocomplete values with coron
117// RUN: %clang --autocomplete=foo,bar,,,-fno-sanitize-coverage=,f | FileCheck %s -check-prefix=FNOSANICOVER-CORON
118// FNOSANICOVER-CORON: func
119
120// Clang should return empty string when no value completion was found, which will fall back to file autocompletion
121// RUN: %clang --autocomplete=-fmodule-file= | FileCheck %s -check-prefix=MODULE_FILE_EQUAL
122// MODULE_FILE_EQUAL-NOT: -fmodule-file=
123// RUN: %clang --autocomplete=-fmodule-file | FileCheck %s -check-prefix=MODULE_FILE
124// MODULE_FILE: -fmodule-file=
125
126// RUN: %clang --autocomplete=-Qunused-arguments, | FileCheck %s -check-prefix=QUNUSED_COMMA
127// QUNUSED_COMMA-NOT: -Qunused-arguments
128// RUN: %clang --autocomplete=-Qunused-arguments | FileCheck %s -check-prefix=QUNUSED
129// QUNUSED: -Qunused-arguments
130