diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 2 | ||||
| -rw-r--r-- | clang/test/PCH/cxx-variadic-templates.cpp | 11 | ||||
| -rw-r--r-- | clang/test/PCH/cxx-variadic-templates.h | 18 |
3 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 1e07e763145..f8f281d9998 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -2964,7 +2964,7 @@ QualType ASTReader::ReadTypeRecord(unsigned Index) { } case TYPE_PACK_EXPANSION: { - if (Record.size() != 1) { + if (Record.size() != 2) { Error("incorrect encoding of pack expansion type"); return QualType(); } diff --git a/clang/test/PCH/cxx-variadic-templates.cpp b/clang/test/PCH/cxx-variadic-templates.cpp new file mode 100644 index 00000000000..9b1df9a737f --- /dev/null +++ b/clang/test/PCH/cxx-variadic-templates.cpp @@ -0,0 +1,11 @@ +// Test this without pch. +// RUN: %clang_cc1 -std=c++0x -include %S/cxx-variadic-templates.h -verify %s -ast-dump -o - +// RUN: %clang_cc1 -std=c++0x -include %S/cxx-variadic-templates.h %s -emit-llvm -o - | FileCheck %s + +// Test with pch. +// RUN: %clang_cc1 -std=c++0x -x c++-header -emit-pch -o %t %S/cxx-variadic-templates.h +// RUN: %clang_cc1 -std=c++0x -include-pch %t -verify %s -ast-dump -o - +// RUN: %clang_cc1 -std=c++0x -include-pch %t %s -emit-llvm -o - | FileCheck %s + +// CHECK: allocate_shared +shared_ptr<int> spi = shared_ptr<int>::allocate_shared(1, 2); diff --git a/clang/test/PCH/cxx-variadic-templates.h b/clang/test/PCH/cxx-variadic-templates.h new file mode 100644 index 00000000000..f6ee7876c2c --- /dev/null +++ b/clang/test/PCH/cxx-variadic-templates.h @@ -0,0 +1,18 @@ +// PR9073 +template<typename _Tp> +class shared_ptr{ +public: + template<class _Alloc, class ..._Args> + static + shared_ptr<_Tp> + allocate_shared(const _Alloc& __a, _Args&& ...__args); +}; + +template<class _Tp> +template<class _Alloc, class ..._Args> +shared_ptr<_Tp> +shared_ptr<_Tp>::allocate_shared(const _Alloc& __a, _Args&& ...__args) +{ + shared_ptr<_Tp> __r; + return __r; +} |

