зеркало из https://github.com/microsoft/clang-1.git
Putting back safe fixes 116836,116837,116838
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116866 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
52a4ff6eae
Коммит
220a9c82dc
|
@ -1580,6 +1580,8 @@ void TagDecl::completeDefinition() {
|
|||
TagDecl* TagDecl::getDefinition() const {
|
||||
if (isDefinition())
|
||||
return const_cast<TagDecl *>(this);
|
||||
if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(this))
|
||||
return CXXRD->getDefinition();
|
||||
|
||||
for (redecl_iterator R = redecls_begin(), REnd = redecls_end();
|
||||
R != REnd; ++R)
|
||||
|
|
|
@ -1116,13 +1116,13 @@ void ASTWriter::WriteDeclsBlockAbbrevs() {
|
|||
Abv->Add(BitCodeAbbrevOp(0)); // hasExtInfo
|
||||
Abv->Add(BitCodeAbbrevOp(serialization::PREDEF_TYPE_NULL_ID)); // InfoType
|
||||
// VarDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // No redeclaration
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // StorageClass
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // StorageClassAsWritten
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isThreadSpecified
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // hasCXXDirectInitializer
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isExceptionVariable
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // isNRVOVariable
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // PrevDecl
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasInit
|
||||
Abv->Add(BitCodeAbbrevOp(0)); // HasMemberSpecializationInfo
|
||||
// ParmVarDecl
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
// Primary header for C++ chained PCH test
|
||||
|
||||
void f();
|
||||
|
||||
// Name not appearing in dependent
|
||||
void pf();
|
||||
|
||||
namespace ns {
|
||||
void g();
|
||||
|
||||
void pg();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct S { typedef int G; };
|
||||
|
||||
// Partially specialize
|
||||
template <typename T>
|
||||
struct S<T *> { typedef int H; };
|
|
@ -1,32 +0,0 @@
|
|||
// Dependent header for C++ chained PCH test
|
||||
|
||||
// Overload function from primary
|
||||
void f(int);
|
||||
|
||||
// Add function with different name
|
||||
void f2();
|
||||
|
||||
// Reopen namespace
|
||||
namespace ns {
|
||||
// Overload function from primary
|
||||
void g(int);
|
||||
|
||||
// Add different name
|
||||
void g2();
|
||||
}
|
||||
|
||||
// Specialize template from primary
|
||||
template <>
|
||||
struct S<int> { typedef int I; };
|
||||
|
||||
// Partially specialize
|
||||
template <typename T>
|
||||
struct S<T &> { typedef int J; };
|
||||
|
||||
// Specialize previous partial specialization
|
||||
template <>
|
||||
struct S<int *> { typedef int K; };
|
||||
|
||||
// Specialize the partial specialization from this file
|
||||
template <>
|
||||
struct S<int &> { typedef int L; };
|
|
@ -1,13 +1,77 @@
|
|||
// Test C++ chained PCH functionality
|
||||
|
||||
// Without PCH
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -include %S/Inputs/chain-cxx1.h -include %S/Inputs/chain-cxx2.h %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -include %s -include %s %s
|
||||
|
||||
// With PCH
|
||||
// RUN: %clang_cc1 -x c++ -emit-pch -o %t1 %S/Inputs/chain-cxx1.h
|
||||
// RUN: %clang_cc1 -x c++ -emit-pch -o %t2 %S/Inputs/chain-cxx2.h -include-pch %t1 -chained-pch
|
||||
// RUN: %clang_cc1 -x c++-header -emit-pch -o %t1 %s
|
||||
// RUN: %clang_cc1 -x c++-header -emit-pch -o %t2 %s -include-pch %t1 -chained-pch
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -include-pch %t2 %s
|
||||
|
||||
#ifndef HEADER1
|
||||
#define HEADER1
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Primary header for C++ chained PCH test
|
||||
|
||||
void f();
|
||||
|
||||
// Name not appearing in dependent
|
||||
void pf();
|
||||
|
||||
namespace ns {
|
||||
void g();
|
||||
|
||||
void pg();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
struct S { typedef int G; };
|
||||
|
||||
// Partially specialize
|
||||
template <typename T>
|
||||
struct S<T *> { typedef int H; };
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
#elif not defined(HEADER2)
|
||||
#define HEADER2
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Dependent header for C++ chained PCH test
|
||||
|
||||
// Overload function from primary
|
||||
void f(int);
|
||||
|
||||
// Add function with different name
|
||||
void f2();
|
||||
|
||||
// Reopen namespace
|
||||
namespace ns {
|
||||
// Overload function from primary
|
||||
void g(int);
|
||||
|
||||
// Add different name
|
||||
void g2();
|
||||
}
|
||||
|
||||
// Specialize template from primary
|
||||
template <>
|
||||
struct S<int> { typedef int I; };
|
||||
|
||||
// Partially specialize
|
||||
template <typename T>
|
||||
struct S<T &> { typedef int J; };
|
||||
|
||||
// Specialize previous partial specialization
|
||||
template <>
|
||||
struct S<int *> { typedef int K; };
|
||||
|
||||
// Specialize the partial specialization from this file
|
||||
template <>
|
||||
struct S<int &> { typedef int L; };
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
#else
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void test() {
|
||||
f();
|
||||
f(1);
|
||||
|
@ -26,3 +90,6 @@ void test() {
|
|||
typedef S<int *>::K T5;
|
||||
typedef S<int &>::L T6;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче