diff options
author | Anders Carlsson <andersca@mac.com> | 2009-07-09 22:00:53 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-07-09 22:00:53 +0000 |
commit | d5940ce01c5f6235c88a8b92e80b86e5b5abe212 (patch) | |
tree | c32269f8b93e835306da77c0bd266969284ddaab | |
parent | eb96e1275206b888eee484aac8b1b693417c6521 (diff) |
Fix another decltype crash.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75175 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/Type.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/decltype-crash.cpp | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index fa1c9152f4..d5dd776b7d 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -125,7 +125,7 @@ QualType Type::getDesugaredType(bool ForDisplay) const { if (const TypeOfType *TOT = dyn_cast<TypeOfType>(this)) return TOT->getUnderlyingType().getDesugaredType(); if (const DecltypeType *DTT = dyn_cast<DecltypeType>(this)) - return DTT->getUnderlyingExpr()->getType().getDesugaredType(); + return DTT->getCanonicalTypeInternal(); if (const TemplateSpecializationType *Spec = dyn_cast<TemplateSpecializationType>(this)) { if (ForDisplay) diff --git a/test/SemaCXX/decltype-crash.cpp b/test/SemaCXX/decltype-crash.cpp new file mode 100644 index 0000000000..c16422e1ba --- /dev/null +++ b/test/SemaCXX/decltype-crash.cpp @@ -0,0 +1,5 @@ +int& a(); + +void f() { + decltype(a()) c; +} |