diff options
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 8 | ||||
-rw-r--r-- | test/CodeGenCXX/debug-info-template.cpp | 10 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 80bec0f0ee..c7a50efcd8 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1226,6 +1226,14 @@ llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty, } else if (Ty->isIncompleteArrayType()) { Size = 0; Align = CGM.getContext().getTypeAlign(Ty->getElementType()); + } else if (Ty->isDependentSizedArrayType()) { + Size = 0; + Align = 0; + } else if (Ty->getElementType()->getTypeClass() + == Type::TemplateSpecialization) { + // FIXME : Emit appropriate element type info. + Size = 0; + Align = 0; } else { // Size and align of the whole array, not the element type. Size = CGM.getContext().getTypeSize(Ty); diff --git a/test/CodeGenCXX/debug-info-template.cpp b/test/CodeGenCXX/debug-info-template.cpp index 0ddfc242b1..8560c5a8e9 100644 --- a/test/CodeGenCXX/debug-info-template.cpp +++ b/test/CodeGenCXX/debug-info-template.cpp @@ -20,3 +20,13 @@ class TU { }; TU<2> u2; + +// PR9600 +template<typename T> class vector {}; +class Foo; +typedef vector<Foo*> FooVector[3]; +struct Test { + virtual void foo(FooVector *); +}; +static Test test; + |