]> granicus.if.org Git - clang/commitdiff
Make CXXBaseSpecifier::getType return unqual type.
authorEli Friedman <eli.friedman@gmail.com>
Thu, 11 Jul 2013 22:22:22 +0000 (22:22 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 11 Jul 2013 22:22:22 +0000 (22:22 +0000)
Various pieces of code, like base initialization in Sema and RTTI IRGen,
don't properly ignore qualifiers on base classes.  Instead of auditing the
whole codebase, just strip them off in the getter.  (The type as written is
still available in the TypeSourceInfo for code that cares.)

Fixes PR16596.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186125 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclCXX.h
test/SemaCXX/class-base-member-init.cpp

index 155cbe50324096f14f93ff971c0cec768b53fe22..52909fbb037e7a3502448220642bac46279e8a8c 100644 (file)
@@ -250,7 +250,9 @@ public:
   /// \brief Retrieves the type of the base class.
   ///
   /// This type will always be an unqualified class type.
-  QualType getType() const { return BaseTypeInfo->getType(); }
+  QualType getType() const {
+    return BaseTypeInfo->getType().getUnqualifiedType();
+  }
 
   /// \brief Retrieves the type and source location of the base class.
   TypeSourceInfo *getTypeSourceInfo() const { return BaseTypeInfo; }
index 2cdca829ffb9615e817c257257a14ff8ca6e37f2..8344e6f49a6760fc04bcca58f690deccfb476310 100644 (file)
@@ -98,3 +98,13 @@ namespace rdar13185264 {
     union { void *a; };
   };
 }
+
+namespace PR16596 {
+  class A { public: virtual ~A(); };
+  typedef const A Foo;
+  void Apply(Foo processor);
+  struct Bar : public Foo {};
+  void Fetch() {
+    Apply(Bar());
+  }
+}