From eac518aee6ea7173e5462fe16768ebb1b3f54b29 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 24 Nov 2013 18:25:32 +0200 Subject: C++: Support __thread and thread_local Task-number: QTCREATORBUG-7679 Change-Id: I794f52b2bcfb6c78ceef86ec53b6ed32b3d53d9f Reviewed-by: Orgad Shaneh Reviewed-by: Erik Verbruggen --- tests/auto/cplusplus/ast/tst_ast.cpp | 11 +++++++++++ tests/auto/cplusplus/cxx11/data/threadLocal.1.cpp | 1 + tests/auto/cplusplus/cxx11/tst_cxx11.cpp | 1 + 3 files changed, 13 insertions(+) create mode 100644 tests/auto/cplusplus/cxx11/data/threadLocal.1.cpp (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index 449c8db6e5..b7474ae874 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -107,6 +107,7 @@ private slots: void gcc_attributes_2(); void gcc_attributes_3(); void crash_test_1(); + void thread_local_1(); // expressions void simple_name_1(); @@ -246,6 +247,16 @@ void tst_AST::crash_test_1() QVERIFY(ast); } +void tst_AST::thread_local_1() +{ + QSharedPointer unit(parseStatement("__thread int i;\n")); + AST *ast = unit->ast(); + QVERIFY(ast); + QCOMPARE(diag.errorCount, 0); + QCOMPARE(Token::name(T_THREAD_LOCAL), "thread_local"); + QCOMPARE(Token::name(T___THREAD), "__thread"); +} + void tst_AST::simple_declaration_1() { QSharedPointer unit(parseStatement("\n" diff --git a/tests/auto/cplusplus/cxx11/data/threadLocal.1.cpp b/tests/auto/cplusplus/cxx11/data/threadLocal.1.cpp new file mode 100644 index 0000000000..b286b0bcee --- /dev/null +++ b/tests/auto/cplusplus/cxx11/data/threadLocal.1.cpp @@ -0,0 +1 @@ +thread_local int i; diff --git a/tests/auto/cplusplus/cxx11/tst_cxx11.cpp b/tests/auto/cplusplus/cxx11/tst_cxx11.cpp index 8ac002e376..9320ab24e3 100644 --- a/tests/auto/cplusplus/cxx11/tst_cxx11.cpp +++ b/tests/auto/cplusplus/cxx11/tst_cxx11.cpp @@ -151,6 +151,7 @@ void tst_cxx11::parse_data() QTest::newRow("templateGreaterGreater.1") << "templateGreaterGreater.1.cpp" << ""; QTest::newRow("packExpansion.1") << "packExpansion.1.cpp" << ""; QTest::newRow("declType.1") << "declType.1.cpp" << ""; + QTest::newRow("threadLocal.1") << "threadLocal.1.cpp" << ""; } void tst_cxx11::parse() -- cgit v1.2.1 From 5c5240815a9577fdb2e5b5ed90fa64f9b57fee44 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 26 Nov 2013 15:23:28 +0100 Subject: CPlusPlus: Fix parsing of ??< ??> ??( ??) trigraphs Almost most useful feature ever. Task-number: QTCREATORBUG-2474 Change-Id: If1ad661fab58ffb4a0b9ddb8ba771f2fde3b54ec Reviewed-by: Nikolai Kosjar --- tests/auto/cplusplus/lexer/tst_lexer.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/lexer/tst_lexer.cpp b/tests/auto/cplusplus/lexer/tst_lexer.cpp index 1dc7383d72..3319e06c36 100644 --- a/tests/auto/cplusplus/lexer/tst_lexer.cpp +++ b/tests/auto/cplusplus/lexer/tst_lexer.cpp @@ -165,6 +165,13 @@ void tst_SimpleLexer::doxygen_comments_data() << T_INT << T_IDENTIFIER << T_SEMICOLON << T_CPP_DOXY_COMMENT << T_INT << T_IDENTIFIER << T_SEMICOLON << T_CPP_DOXY_COMMENT << T_CPP_DOXY_COMMENT; QTest::newRow(source) << source << expectedTokenKindList; + + source = "?""?(?""?)?""?a?b:c"; + expectedTokenKindList = QList() + << T_LBRACKET << T_RBRACKET << T_LBRACE << T_RBRACE + << T_IDENTIFIER << T_QUESTION << T_IDENTIFIER << T_COLON << T_IDENTIFIER; + QTest::newRow(source) << source << expectedTokenKindList; + } QTEST_APPLESS_MAIN(tst_SimpleLexer) -- cgit v1.2.1 From 1d834c1126dde58dd71e595b3f5e135cc0ca4dbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sch=C3=A4fer?= Date: Tue, 26 Nov 2013 21:56:30 +0100 Subject: Preprocessor Enginge: fix bug in pp-engine.cpp Preprocessor variables __LINE__,__FILE__,__TIME__,__DATE__ where destroying the following systems when affected variables were standing within the same line with those variables: * highlighting * refactoring * local renaming Task-number: QTCREATORBUG-8036 Change-Id: I1a4b919d15812872ca5a8e63b1031ec1ab144c22 Reviewed-by: Nikolai Kosjar --- tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp | 18 ------------------ 1 file changed, 18 deletions(-) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 2594bc692f..7d3f44c06b 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -334,7 +334,6 @@ private slots: void unfinished_function_like_macro_call(); void nasty_macro_expansion(); void glib_attribute(); - void builtin__FILE__(); void blockSkipping(); void includes_1(); void dont_eagerly_expand(); @@ -784,23 +783,6 @@ void tst_Preprocessor::glib_attribute() QCOMPARE(preprocessed, result____); } -void tst_Preprocessor::builtin__FILE__() -{ - Client *client = 0; // no client. - Environment env; - - Preprocessor preprocess(client, &env); - QByteArray preprocessed = preprocess.run( - QLatin1String("some-file.c"), - QByteArray("const char *f = __FILE__\n" - )); - const QByteArray result____ = - "# 1 \"some-file.c\"\n" - "const char *f = \"some-file.c\"\n"; - - QCOMPARE(preprocessed, result____); -} - void tst_Preprocessor::comparisons_data() { QTest::addColumn("infile"); -- cgit v1.2.1 From 4edfe87b58ca8e5f92b6a10dcf98e3d240f38245 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 29 Nov 2013 10:53:45 +0100 Subject: Revert "Preprocessor Enginge: fix bug in pp-engine.cpp" Breaks highlighting for macros using the predefined macros. This reverts commit 1d834c1126dde58dd71e595b3f5e135cc0ca4dbd. Change-Id: Ic13c407e293a806a63ff30153864530df6a32e47 Reviewed-by: hjk Reviewed-by: Erik Verbruggen --- tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 7d3f44c06b..2594bc692f 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -334,6 +334,7 @@ private slots: void unfinished_function_like_macro_call(); void nasty_macro_expansion(); void glib_attribute(); + void builtin__FILE__(); void blockSkipping(); void includes_1(); void dont_eagerly_expand(); @@ -783,6 +784,23 @@ void tst_Preprocessor::glib_attribute() QCOMPARE(preprocessed, result____); } +void tst_Preprocessor::builtin__FILE__() +{ + Client *client = 0; // no client. + Environment env; + + Preprocessor preprocess(client, &env); + QByteArray preprocessed = preprocess.run( + QLatin1String("some-file.c"), + QByteArray("const char *f = __FILE__\n" + )); + const QByteArray result____ = + "# 1 \"some-file.c\"\n" + "const char *f = \"some-file.c\"\n"; + + QCOMPARE(preprocessed, result____); +} + void tst_Preprocessor::comparisons_data() { QTest::addColumn("infile"); -- cgit v1.2.1 From 4c2daa90ce558c3b4287edc97127471486a411d9 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 29 Nov 2013 11:25:47 +0100 Subject: C++: Fix highlighting for lines with predefined macros This adds definitions for the macros __FILE__, __LINE__, __DATE__ and __TIME__ on demand. As a side effect, this also introduces highlighting for the uses of these macros. Task-number: QTCREATORBUG-8036 Change-Id: Ib7546c7d45d2eecbc50c7883fc684e3497154405 Reviewed-by: Erik Verbruggen Reviewed-by: Eike Ziller Reviewed-by: hjk --- .../cplusplus/checksymbols/tst_checksymbols.cpp | 51 ++++++++++++++++++++++ .../cplusplus/preprocessor/tst_preprocessor.cpp | 6 ++- 2 files changed, 56 insertions(+), 1 deletion(-) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp index 26ece497a0..9afbd31573 100644 --- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp +++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp @@ -175,6 +175,8 @@ private slots: void test_checksymbols_VirtualMethodUse(); void test_checksymbols_LabelUse(); void test_checksymbols_MacroUse(); + void test_checksymbols_Macros__FILE__LINE__DATE__TIME__1(); + void test_checksymbols_Macros__FILE__LINE__DATE__TIME__2(); void test_checksymbols_FunctionUse(); void test_checksymbols_PseudoKeywordUse(); void test_checksymbols_StaticUse(); @@ -326,6 +328,55 @@ void tst_CheckSymbols::test_checksymbols_MacroUse() TestData::check(source, expectedUses, macroUses); } +void tst_CheckSymbols::test_checksymbols_Macros__FILE__LINE__DATE__TIME__1() +{ + const QByteArray source = + "#define FILE_DATE_TIME __FILE__ \" / \" __DATE__ \" / \" __TIME__\n" + "#define LINE_NUMBER 0 + __LINE__\n" + "\n" + "void f()\n" + "{\n" + " class Printer;\n" + " Printer::printText(FILE_DATE_TIME); Printer::printInteger(LINE_NUMBER); Printer::nl();\n" + " return;\n" + "}\n"; + const QList expectedUses = QList() + << Use(4, 6, 1, CppHighlightingSupport::FunctionUse) + << Use(6, 11, 7, CppHighlightingSupport::TypeUse) + << Use(6, 11, 7, CppHighlightingSupport::TypeUse) + << Use(7, 5, 7, CppHighlightingSupport::TypeUse) + << Use(7, 41, 7, CppHighlightingSupport::TypeUse) + << Use(7, 77, 7, CppHighlightingSupport::TypeUse) + ; + + TestData::check(source, expectedUses); +} + +void tst_CheckSymbols::test_checksymbols_Macros__FILE__LINE__DATE__TIME__2() +{ + const QByteArray source = + "void f()\n" + "{\n" + " class Printer;\n" + " Printer::printInteger(__LINE__); Printer::printText(__FILE__); Printer::nl();\n" + " Printer::printText(__DATE__); Printer::printText(__TIME__); Printer::nl();\n" + " return;\n" + "}\n"; + const QList expectedUses = QList() + << Use(1, 6, 1, CppHighlightingSupport::FunctionUse) + << Use(3, 11, 7, CppHighlightingSupport::TypeUse) + << Use(3, 11, 7, CppHighlightingSupport::TypeUse) + << Use(4, 5, 7, CppHighlightingSupport::TypeUse) + << Use(4, 38, 7, CppHighlightingSupport::TypeUse) + << Use(4, 68, 7, CppHighlightingSupport::TypeUse) + << Use(5, 5, 7, CppHighlightingSupport::TypeUse) + << Use(5, 35, 7, CppHighlightingSupport::TypeUse) + << Use(5, 65, 7, CppHighlightingSupport::TypeUse) + ; + + TestData::check(source, expectedUses); +} + void tst_CheckSymbols::test_checksymbols_FunctionUse() { const QByteArray source = diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 2594bc692f..489722d675 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -796,7 +796,11 @@ void tst_Preprocessor::builtin__FILE__() )); const QByteArray result____ = "# 1 \"some-file.c\"\n" - "const char *f = \"some-file.c\"\n"; + "const char *f =\n" + "# expansion begin 16,8 ~1\n" + "\"some-file.c\"\n" + "# expansion end\n" + "# 2 \"some-file.c\"\n"; QCOMPARE(preprocessed, result____); } -- cgit v1.2.1 From 796fcaf1d288267e93baba3d01927957c684758f Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 2 Dec 2013 15:47:36 +0100 Subject: Revert "C++: Fix highlighting for lines with predefined macros" This takes too much memory. For qtcreator.pro the numbers are as follows: Patch applied: ~ 1600MB (RES) Patch reverted: ~ 510MB (RES) This reverts commit 4c2daa90ce558c3b4287edc97127471486a411d9. Task-number: QTCREATORBUG-10973 Change-Id: I843bd7c1ea4a26a1ec55ddc14c2a34a98d040922 Reviewed-by: hjk Reviewed-by: Robert Loehning Reviewed-by: Eike Ziller Reviewed-by: Orgad Shaneh Reviewed-by: Erik Verbruggen --- .../cplusplus/checksymbols/tst_checksymbols.cpp | 51 ---------------------- .../cplusplus/preprocessor/tst_preprocessor.cpp | 6 +-- 2 files changed, 1 insertion(+), 56 deletions(-) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp index 9afbd31573..26ece497a0 100644 --- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp +++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp @@ -175,8 +175,6 @@ private slots: void test_checksymbols_VirtualMethodUse(); void test_checksymbols_LabelUse(); void test_checksymbols_MacroUse(); - void test_checksymbols_Macros__FILE__LINE__DATE__TIME__1(); - void test_checksymbols_Macros__FILE__LINE__DATE__TIME__2(); void test_checksymbols_FunctionUse(); void test_checksymbols_PseudoKeywordUse(); void test_checksymbols_StaticUse(); @@ -328,55 +326,6 @@ void tst_CheckSymbols::test_checksymbols_MacroUse() TestData::check(source, expectedUses, macroUses); } -void tst_CheckSymbols::test_checksymbols_Macros__FILE__LINE__DATE__TIME__1() -{ - const QByteArray source = - "#define FILE_DATE_TIME __FILE__ \" / \" __DATE__ \" / \" __TIME__\n" - "#define LINE_NUMBER 0 + __LINE__\n" - "\n" - "void f()\n" - "{\n" - " class Printer;\n" - " Printer::printText(FILE_DATE_TIME); Printer::printInteger(LINE_NUMBER); Printer::nl();\n" - " return;\n" - "}\n"; - const QList expectedUses = QList() - << Use(4, 6, 1, CppHighlightingSupport::FunctionUse) - << Use(6, 11, 7, CppHighlightingSupport::TypeUse) - << Use(6, 11, 7, CppHighlightingSupport::TypeUse) - << Use(7, 5, 7, CppHighlightingSupport::TypeUse) - << Use(7, 41, 7, CppHighlightingSupport::TypeUse) - << Use(7, 77, 7, CppHighlightingSupport::TypeUse) - ; - - TestData::check(source, expectedUses); -} - -void tst_CheckSymbols::test_checksymbols_Macros__FILE__LINE__DATE__TIME__2() -{ - const QByteArray source = - "void f()\n" - "{\n" - " class Printer;\n" - " Printer::printInteger(__LINE__); Printer::printText(__FILE__); Printer::nl();\n" - " Printer::printText(__DATE__); Printer::printText(__TIME__); Printer::nl();\n" - " return;\n" - "}\n"; - const QList expectedUses = QList() - << Use(1, 6, 1, CppHighlightingSupport::FunctionUse) - << Use(3, 11, 7, CppHighlightingSupport::TypeUse) - << Use(3, 11, 7, CppHighlightingSupport::TypeUse) - << Use(4, 5, 7, CppHighlightingSupport::TypeUse) - << Use(4, 38, 7, CppHighlightingSupport::TypeUse) - << Use(4, 68, 7, CppHighlightingSupport::TypeUse) - << Use(5, 5, 7, CppHighlightingSupport::TypeUse) - << Use(5, 35, 7, CppHighlightingSupport::TypeUse) - << Use(5, 65, 7, CppHighlightingSupport::TypeUse) - ; - - TestData::check(source, expectedUses); -} - void tst_CheckSymbols::test_checksymbols_FunctionUse() { const QByteArray source = diff --git a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp index 489722d675..2594bc692f 100644 --- a/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp +++ b/tests/auto/cplusplus/preprocessor/tst_preprocessor.cpp @@ -796,11 +796,7 @@ void tst_Preprocessor::builtin__FILE__() )); const QByteArray result____ = "# 1 \"some-file.c\"\n" - "const char *f =\n" - "# expansion begin 16,8 ~1\n" - "\"some-file.c\"\n" - "# expansion end\n" - "# 2 \"some-file.c\"\n"; + "const char *f = \"some-file.c\"\n"; QCOMPARE(preprocessed, result____); } -- cgit v1.2.1 From 223ecc70a2015e47500254589d5ffd30051134d6 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Tue, 3 Dec 2013 10:30:05 +0100 Subject: C++: Compile fix for tst_lexer The trigraph sequence somehow confused qmake. The moc file was not generated. Change-Id: I4016947b5c8efa350d1813737651143d8687d299 Reviewed-by: hjk --- tests/auto/cplusplus/lexer/tst_lexer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/auto/cplusplus') diff --git a/tests/auto/cplusplus/lexer/tst_lexer.cpp b/tests/auto/cplusplus/lexer/tst_lexer.cpp index 3319e06c36..5b49045488 100644 --- a/tests/auto/cplusplus/lexer/tst_lexer.cpp +++ b/tests/auto/cplusplus/lexer/tst_lexer.cpp @@ -166,7 +166,7 @@ void tst_SimpleLexer::doxygen_comments_data() << T_INT << T_IDENTIFIER << T_SEMICOLON << T_CPP_DOXY_COMMENT << T_CPP_DOXY_COMMENT; QTest::newRow(source) << source << expectedTokenKindList; - source = "?""?(?""?)?""?a?b:c"; + source = "?" "?(?" "?)?" "?a?b:c"; expectedTokenKindList = QList() << T_LBRACKET << T_RBRACKET << T_LBRACE << T_RBRACE << T_IDENTIFIER << T_QUESTION << T_IDENTIFIER << T_COLON << T_IDENTIFIER; -- cgit v1.2.1