Fix qlogging autotest for clang
authorKai Koehne <kai.koehne@nokia.com>
Fri, 10 Feb 2012 08:41:50 +0000 (09:41 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 10 Feb 2012 14:28:22 +0000 (15:28 +0100)
Change-Id: Iac82c4847554534174b5419ec78319c9ac381628
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
src/corelib/global/qlogging.cpp
tests/auto/corelib/global/qlogging/tst_qlogging.cpp

index 39b3205..164b846 100644 (file)
@@ -204,6 +204,11 @@ Q_AUTOTEST_EXPORT QByteArray qCleanupFuncinfo(QByteArray info)
     }
     info = info.mid(pos + 1);
 
+    // remove trailing '*', '&' that are part of the return argument
+    while ((info.at(0) == '*')
+           || (info.at(0) == '&'))
+        info = info.mid(1);
+
     // we have the full function name now.
     // clean up the templates
     while ((pos = info.lastIndexOf('>')) != -1) {
index 742a858..b2935ea 100644 (file)
@@ -154,6 +154,7 @@ class TestClass1
 {
 public:
     enum Something { foo };
+    char c;
 
     void func_void() { ADD("TestClass1::func_void"); }
     int func_int() { ADD("TestClass1::func_int"); return 0; }
@@ -164,6 +165,7 @@ public:
     char func_char() { ADD("TestClass1::func_char"); return 0; }
     signed char func_schar() { ADD("TestClass1::func_schar"); return 0; }
     unsigned char func_uchar() { ADD("TestClass1::func_uchar"); return 0; }
+    char &func_Rchar() { ADD("TestClass1::func_Rchar"); return c; }
     char *func_Pchar() { ADD("TestClass1::func_Pchar"); return 0; }
     const char *func_KPchar() { ADD("TestClass1::func_KPchar"); return 0; }
     const volatile char *func_VKPchar() { ADD("TestClass1::func_VKPchar"); return 0; }
@@ -221,6 +223,7 @@ public:
             func_char();
             func_schar();
             func_uchar();
+            func_Rchar();
             func_Pchar();
             func_KPchar();
             func_VKPchar();
@@ -383,12 +386,25 @@ void tst_qmessagehandler::cleanupFuncinfo_data()
         << "unsigned char TestClass1::func_uchar()"
         << "TestClass1::func_uchar";
 
+    QTest::newRow("msvc_09a")
+        << "char &__thiscall TestClass1::func_Rchar(void)"
+        << "TestClass1::func_Rchar";
+    QTest::newRow("gcc_09a")
+        << "char& TestClass1::func_Rchar()"
+        << "TestClass1::func_Rchar";
+    QTest::newRow("clang_09a")
+        << "char &TestClass1::func_Rchar()"
+        << "TestClass1::func_Rchar";
+
     QTest::newRow("msvc_10")
         << "char *__thiscall TestClass1::func_Pchar(void)"
         << "TestClass1::func_Pchar";
     QTest::newRow("gcc_10")
         << "char* TestClass1::func_Pchar()"
         << "TestClass1::func_Pchar";
+    QTest::newRow("clang_10")
+        << "char *TestClass1::func_Pchar()"
+        << "TestClass1::func_Pchar";
 
     QTest::newRow("msvc_11")
         << "const char *__thiscall TestClass1::func_KPchar(void)"
@@ -592,6 +608,7 @@ void tst_qmessagehandler::cleanupFuncinfo()
 #ifdef QT_BUILD_INTERNAL
     QFETCH(QString, funcinfo);
 
+//    qDebug() << funcinfo.toLatin1();
     QByteArray result = qCleanupFuncinfo(funcinfo.toLatin1());
     QTEST(QString::fromLatin1(result), "expected");
 #endif