forked from OSchip/llvm-project
PR13575: Fix USR mangling for fixed-size arrays
Differential Revision: https://reviews.llvm.org/D38643 llvm-svn: 315236
This commit is contained in:
parent
1364d268a4
commit
663ba15ed6
|
@ -816,6 +816,25 @@ void USRGenerator::VisitType(QualType T) {
|
||||||
T = VT->getElementType();
|
T = VT->getElementType();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (const auto *const AT = dyn_cast<ArrayType>(T)) {
|
||||||
|
Out << '{';
|
||||||
|
switch (AT->getSizeModifier()) {
|
||||||
|
case ArrayType::Static:
|
||||||
|
Out << 's';
|
||||||
|
break;
|
||||||
|
case ArrayType::Star:
|
||||||
|
Out << '*';
|
||||||
|
break;
|
||||||
|
case ArrayType::Normal:
|
||||||
|
Out << 'n';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (const auto *const CAT = dyn_cast<ConstantArrayType>(T))
|
||||||
|
Out << CAT->getSize();
|
||||||
|
|
||||||
|
T = AT->getElementType();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Unhandled type.
|
// Unhandled type.
|
||||||
Out << ' ';
|
Out << ' ';
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: c-index-test core -print-source-symbols -- %s | FileCheck %s
|
||||||
|
|
||||||
|
// Function template specializations differing in array type parameter should have unique USRs.
|
||||||
|
|
||||||
|
template<class buffer> void foo(buffer);
|
||||||
|
// CHECK: {{[0-9]+}}:17 | function(Gen,TS)/C++ | foo | c:@F@foo<#{n16C>#*C# | __Z3fooIA16_cEvT_ | Decl,RelSpecialization | rel: 1
|
||||||
|
template<> void foo<char[16]>(char[16]);
|
||||||
|
// CHECK: {{[0-9]+}}:17 | function(Gen,TS)/C++ | foo | c:@F@foo<#{n32C>#*C# | __Z3fooIA32_cEvT_ | Decl,RelSpecialization | rel: 1
|
||||||
|
template<> void foo<char[32]>(char[32]);
|
||||||
|
// CHECK: {{[0-9]+}}:17 | function(Gen,TS)/C++ | foo | c:@F@foo<#{n64C>#*C# | __Z3fooIA64_cEvT_ | Decl,RelSpecialization | rel: 1
|
||||||
|
template<> void foo<char[64]>(char[64]);
|
Loading…
Reference in New Issue