Tweak fix for http://llvm.org/bugs/show_bug.cgi?id=2000 to work across typedefs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47269 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/AST/Expr.cpp b/AST/Expr.cpp
index 720b490..27dfa78 100644
--- a/AST/Expr.cpp
+++ b/AST/Expr.cpp
@@ -358,7 +358,7 @@
return LV_NotObjectType;
// Allow qualified void which is an incomplete type other than void (yuck).
- if (TR->isVoidType() && !TR.getQualifiers())
+ if (TR->isVoidType() && !TR.getCanonicalType().getQualifiers())
return LV_IncompleteVoidType;
if (TR->isReferenceType()) // C++ [expr]
diff --git a/test/Sema/deref.c b/test/Sema/deref.c
index 8f8156d..83f7f83 100644
--- a/test/Sema/deref.c
+++ b/test/Sema/deref.c
@@ -21,6 +21,7 @@
}
extern const void cv1;
+
const void *foo4 (void)
{
return &cv1;
@@ -31,3 +32,12 @@
{
return &cv2; // expected-error{{address expression must be an lvalue or a function designator}}
}
+
+typedef const void CVT;
+extern CVT cv3;
+
+const void *foo6 (void)
+{
+ return &cv3;
+}
+