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
Can we remove the triple from this test, and instead test it on the default target for each bot? That should give us broader coverage, and let us find out if the same bug exists for other targets too.