]> granicus.if.org Git - clang/commit
[Clang][ARM] __va_list declaration is not saved in ASTContext causing compilation...
authorOleg Ranevskyy <oranevskyy@accesssoftek.com>
Wed, 30 Mar 2016 21:30:30 +0000 (21:30 +0000)
committerOleg Ranevskyy <oranevskyy@accesssoftek.com>
Wed, 30 Mar 2016 21:30:30 +0000 (21:30 +0000)
commitf8e3a726f00d920e2910811c0dd58f5a7f422834
treed157c708365572b864a24177b8fca631d1e595cb
parent44b502ab839d33b040edb4ef36b968296e335dfd
[Clang][ARM] __va_list declaration is not saved in ASTContext causing compilation error or crash

Summary:
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
```

Reviewers: logan, rsmith

Subscribers: cfe-commits, asl, aemerson, rengolin

Differential Revision: http://reviews.llvm.org/D18557

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264930 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/ASTContext.cpp
test/PCH/Inputs/__va_list_tag-typedef.h [new file with mode: 0644]
test/PCH/__va_list_tag-typedef.c [new file with mode: 0644]