================ @@ -0,0 +1,43 @@ +// RUN: %clang_cc1 -std=c23 -fsyntax-only -ffreestanding -verify=expected,both %s -triple i386-pc-unknown +// RUN: %clang_cc1 -std=c23 -fsyntax-only -ffreestanding -verify=expected,both %s -triple x86_64-apple-darwin9 +// RUN: %clang_cc1 -std=c23 -fsyntax-only -ffreestanding -fms-compatibility -verify=expected,both %s -triple x86_64-pc-win32 +// RUN: %clang_cc1 -std=c17 -fsyntax-only -ffreestanding -verify=both,pre-c23 %s + +void foo(int x, int y, ...) { + __builtin_va_list list; + __builtin_c23_va_start(); // pre-c23-error {{use of unknown builtin '__builtin_c23_va_start'}} \ + expected-error{{too few arguments to function call, expected 1, have 0}} + // Note, the unknown builtin diagnostic is only issued once per function, + // which is why the rest of the lines do not get the same diagonstic. + __builtin_c23_va_start(list); // ok + __builtin_c23_va_start(list, 0); // expected-warning {{second argument to 'va_start' is not the last named parameter}} + __builtin_c23_va_start(list, x); // expected-warning {{second argument to 'va_start' is not the last named parameter}} + __builtin_c23_va_start(list, y); // ok + __builtin_c23_va_start(list, 0, 1); // expected-error {{too many arguments to function call, expected at most 2, have 3}} + __builtin_c23_va_start(list, y, y); // expected-error {{too many arguments to function call, expected at most 2, have 3}} +} + +// Test the same thing as above, only with the macro from stdarg.h. This will +// not have the unknown builtin diagnostics, but will have different +// diagnostics between C23 and earlier modes. +#include <stdarg.h> ---------------- AaronBallman wrote:
Same as always, it's a freestanding header. Hence passing `-ffreestanding`. This is one we provide, so there's no issue here. https://github.com/llvm/llvm-project/pull/131166 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits