When the code is compiled for arm32 and the builtin __va_list declaration is created by CreateAAPCSABIBuiltinVaListDecl, the declaration is not saved in the ASTContext which may lead to a compilation error or crash.
Minimal reproducer I was able to find:
header.h
#include <stdarg.h> typedef va_list va_list_1;
test.cpp
typedef __builtin_va_list va_list_2; void foo(const char* format, ...) { va_list args; va_start( args, format ); }
Steps to reproduce:
clang -x c++-header --target=armv7l-linux-eabihf header.h clang -c -include header.h --target=armv7l-linux-eabihf test.cpp
Compilation error:
error: non-const lvalue reference to type '__builtin_va_list' cannot bind to a value of unrelated type 'va_list' (aka '__builtin_va_list')
Compiling the same code as a C source leads to a crash:
clang --target=armv7l-linux-eabihf header.h clang -c -x c -include header.h --target=armv7l-linux-eabihf test.cpp