PR15100: look through type sugar when determining whether we have one of the
authorRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 29 Jan 2013 02:49:47 +0000 (02:49 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Tue, 29 Jan 2013 02:49:47 +0000 (02:49 +0000)
forms of 'main' which we accept as an extension.

llvm-svn: 173758

clang/lib/Sema/SemaDecl.cpp
clang/test/CXX/basic/basic.start/basic.start.main/p2.cpp

index e8d14e6..9c36664 100644 (file)
@@ -6647,7 +6647,8 @@ void Sema::CheckMain(FunctionDecl* FD, const DeclSpec& DS) {
       const PointerType* PT;
       if ((PT = qs.strip(AT)->getAs<PointerType>()) &&
           (PT = qs.strip(PT->getPointeeType())->getAs<PointerType>()) &&
-          (QualType(qs.strip(PT->getPointeeType()), 0) == Context.CharTy)) {
+          Context.hasSameType(QualType(qs.strip(PT->getPointeeType()), 0),
+                              Context.CharTy)) {
         qs.removeConst();
         mismatch = !qs.empty();
       }
index 38536e6..a5386f1 100644 (file)
 // RUN: not %clang_cc1 -x c++ %t -std=c++11 -fixit -DTEST9
 // RUN: %clang_cc1 -x c++ %t -std=c++11 -fsyntax-only -DTEST9
 
+// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST10
+// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST11
+// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST12
+
 #if TEST1
 
 // expected-no-diagnostics
@@ -71,6 +75,25 @@ int main() { } // expected-error{{'main' cannot be a template}}
 
 constexpr int main() { } // expected-error{{'main' is not allowed to be declared constexpr}}
 
+#elif TEST10
+
+// PR15100
+// expected-no-diagnostics
+typedef char charT;
+int main(int, const charT**) {}
+
+#elif TEST11
+
+// expected-no-diagnostics
+typedef char charT;
+int main(int, charT* const *) {}
+
+#elif TEST12
+
+// expected-no-diagnostics
+typedef char charT;
+int main(int, const charT* const *) {}
+
 #else
 
 #error Unknown test mode