aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-07-09 22:00:53 +0000
committerAnders Carlsson <andersca@mac.com>2009-07-09 22:00:53 +0000
commitd5940ce01c5f6235c88a8b92e80b86e5b5abe212 (patch)
treec32269f8b93e835306da77c0bd266969284ddaab
parenteb96e1275206b888eee484aac8b1b693417c6521 (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.cpp2
-rw-r--r--test/SemaCXX/decltype-crash.cpp5
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;
+}