126 lines · c
1// RUN: rm -fR %t2// RUN: split-file %s %t3// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds0.c4// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds0.c5// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds1.c6// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds1.c7// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds2.c8// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds2.c9// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds3.c10// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds3.c11// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds4.c12// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds4.c13// RUN: %clang_cc1 -fsyntax-only -verify -Werror=implicit-function-declaration -std=c89 %t/stdargneeds5.c14// RUN: %clang_cc1 -fsyntax-only -verify=expected-modules -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -Werror=implicit-function-declaration -std=c89 %t/stdargneeds5.c15 16// Split the file so that the "implicitly declaring library function" errors get repeated.17// Use C89 to verify that __need_ can be used to get types that wouldn't normally be available.18 19//--- stdargneeds0.c20static void f(int p, ...) {21 __gnuc_va_list g; // expected-error{{undeclared identifier '__gnuc_va_list'}} expected-modules-error{{undeclared identifier}}22 va_list v; // expected-error{{undeclared identifier 'va_list'}} expected-modules-error{{undeclared identifier}}23 va_start(v, p); // expected-error{{implicitly declaring library function 'va_start'}} expected-note{{include the header <stdarg.h> or explicitly provide a declaration for 'va_start'}} expected-error{{undeclared identifier 'v'}} \24 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}} expected-modules-error{{undeclared identifier}}25 int i = va_arg(v, int); // expected-error{{implicit declaration of function 'va_arg'}} expected-error{{expected expression}} expected-error{{use of undeclared identifier 'v'}} \26 expected-modules-error{{implicit declaration of function}} expected-modules-error{{expected expression}} expected-modules-error{{undeclared identifier}}27 va_end(v); // expected-error{{implicitly declaring library function 'va_end'}} expected-note{{include the header <stdarg.h> or explicitly provide a declaration for 'va_end'}} expected-error{{undeclared identifier 'v'}} \28 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}} expected-modules-error{{undeclared identifier}}29 __va_copy(g, v); // expected-error{{implicit declaration of function '__va_copy'}} expected-error{{use of undeclared identifier 'g'}} expected-error{{use of undeclared identifier 'v'}} \30 expected-modules-error{{implicit declaration of function}} expected-modules-error{{undeclared identifier}} expected-modules-error{{undeclared identifier}}31 va_copy(g, v); // expected-error{{implicitly declaring library function 'va_copy'}} expected-note{{include the header <stdarg.h> or explicitly provide a declaration for 'va_copy'}} expected-error{{use of undeclared identifier 'g'}} expected-error{{use of undeclared identifier 'v'}} \32 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}} expected-modules-error{{undeclared identifier}} expected-modules-error{{undeclared identifier}}33}34 35//--- stdargneeds1.c36#define __need___va_list37#include <stdarg.h>38static void f(int p, ...) {39 __gnuc_va_list g;40 va_list v; // expected-error{{undeclared identifier}} \41 expected-modules-error{{'va_list' must be declared before it is used}} expected-modules-note@__stdarg_va_list.h:*{{declaration here is not visible}}42 va_start(v, p); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} expected-error{{undeclared identifier}} \43 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}44 int i = va_arg(v, int); // expected-error{{implicit declaration of function}} expected-error{{expected expression}} expected-error{{undeclared identifier}} \45 expected-modules-error{{implicit declaration of function}} expected-modules-error{{expected expression}}46 va_end(v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} expected-error{{undeclared identifier}} \47 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}48 __va_copy(g, v); // expected-error{{implicit declaration of function}} expected-error{{undeclared identifier}} \49 expected-modules-error{{implicit declaration of function}}50 va_copy(g, v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} expected-error{{undeclared identifier}} \51 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}52}53 54//--- stdargneeds2.c55#define __need_va_list56#include <stdarg.h>57static void f(int p, ...) {58 __gnuc_va_list g; // expected-error{{undeclared identifier}} \59 expected-modules-error{{'__gnuc_va_list' must be declared before it is used}} expected-modules-note@__stdarg___gnuc_va_list.h:*{{declaration here is not visible}}60 va_list v;61 va_start(v, p); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \62 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}63 int i = va_arg(v, int); // expected-error{{implicit declaration of function}} expected-error{{expected expression}} \64 expected-modules-error{{implicit declaration of function}} expected-modules-error{{expected expression}}65 va_end(v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \66 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}67 __va_copy(g, v); // expected-error{{implicit declaration of function}} expected-error{{undeclared identifier}} \68 expected-modules-error{{implicit declaration of function}}69 va_copy(g, v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} expected-error{{undeclared identifier}} \70 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}71}72 73//--- stdargneeds3.c74#define __need_va_list75#define __need_va_arg76#include <stdarg.h>77static void f(int p, ...) {78 __gnuc_va_list g; // expected-error{{undeclared identifier}} \79 expected-modules-error{{'__gnuc_va_list' must be declared before it is used}} expected-modules-note@__stdarg___gnuc_va_list.h:*{{declaration here is not visible}}80 va_list v;81 va_start(v, p);82 int i = va_arg(v, int);83 va_end(v);84 __va_copy(g, v); // expected-error{{implicit declaration of function}} expected-error{{undeclared identifier}} \85 expected-modules-error{{implicit declaration of function}}86 va_copy(g, v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} expected-error{{undeclared identifier}} \87 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}88}89 90//--- stdargneeds4.c91#define __need___va_list92#define __need_va_list93#define __need___va_copy94#include <stdarg.h>95static void f(int p, ...) {96 __gnuc_va_list g;97 va_list v;98 va_start(v, p); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \99 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}100 int i = va_arg(v, int); // expected-error{{implicit declaration of function}} expected-error{{expected expression}} \101 expected-modules-error{{implicit declaration of function}} expected-modules-error{{expected expression}}102 va_end(v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \103 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}104 __va_copy(g, v);105 va_copy(g, v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \106 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}107}108 109//--- stdargneeds5.c110#define __need___va_list111#define __need_va_list112#define __need_va_copy113#include <stdarg.h>114static void f(int p, ...) {115 __gnuc_va_list g;116 va_list v;117 va_start(v, p); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \118 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}119 int i = va_arg(v, int); // expected-error{{implicit declaration of function}} expected-error{{expected expression}} \120 expected-modules-error{{implicit declaration of function}} expected-modules-error{{expected expression}}121 va_end(v); // expected-error{{implicitly declaring library function}} expected-note{{provide a declaration}} \122 expected-modules-error{{implicitly declaring library function}} expected-modules-note{{provide a declaration}}123 __va_copy(g, v); // expected-error{{implicit declaration of function}} expected-modules-error{{implicit declaration of function}}124 va_copy(g, v);125}126