summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-07-15 12:37:19 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2014-07-22 16:43:51 +0200
commit45b1169d063321c72002dd732e920b87c219e0af (patch)
treea94302fdcc1554f63c346821a3bdb4bd57e603e2 /tests
parentd2db54b451bda4553ec171eb5802131a3a694f59 (diff)
downloadqt-creator-45b1169d063321c72002dd732e920b87c219e0af.tar.gz
C++: Support alignas in C++11 mode.
Change-Id: Ifa81a481bf92b5b71495a105ae292f3e9895f704 Task-number: QTCREATORBUG-9279 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/cplusplus/ast/tst_ast.cpp12
-rw-r--r--tests/auto/cplusplus/cxx11/data/alignofAlignas.1.cpp6
-rw-r--r--tests/auto/cplusplus/findusages/tst_findusages.cpp33
-rw-r--r--tests/tools/cplusplus-ast2png/dumpers.inc20
4 files changed, 62 insertions, 9 deletions
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index 05712ce5f3..1cd04ce471 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -207,12 +207,12 @@ void tst_AST::gcc_attributes_2()
QVERIFY(ns->attribute_list);
QVERIFY(!ns->attribute_list->next);
QVERIFY(ns->attribute_list->value);
- AttributeSpecifierAST *attrSpec = ns->attribute_list->value->asAttributeSpecifier();
+ GnuAttributeSpecifierAST *attrSpec = ns->attribute_list->value->asGnuAttributeSpecifier();
QVERIFY(attrSpec);
QVERIFY(attrSpec->attribute_list);
QVERIFY(!attrSpec->attribute_list->next);
QVERIFY(attrSpec->attribute_list->value);
- AttributeAST *attr = attrSpec->attribute_list->value->asAttribute();
+ GnuAttributeAST *attr = attrSpec->attribute_list->value->asGnuAttribute();
QVERIFY(attr);
QCOMPARE(unit->spell(attr->identifier_token), "__visibility__");
QVERIFY(attr->expression_list);
@@ -1371,13 +1371,13 @@ void tst_AST::objc_method_attributes_1()
QVERIFY(foo->attribute_list);
QVERIFY(foo->attribute_list->value);
QVERIFY(! (foo->attribute_list->next));
- AttributeSpecifierAST *deprecatedSpec = foo->attribute_list->value->asAttributeSpecifier();
+ GnuAttributeSpecifierAST *deprecatedSpec = foo->attribute_list->value->asGnuAttributeSpecifier();
QVERIFY(deprecatedSpec);
QCOMPARE(unit->tokenKind(deprecatedSpec->attribute_token), (int) T___ATTRIBUTE__);
QVERIFY(deprecatedSpec->attribute_list);
QVERIFY(deprecatedSpec->attribute_list->value);
QVERIFY(! (deprecatedSpec->attribute_list->next));
- AttributeAST *deprecatedAttr = deprecatedSpec->attribute_list->value->asAttribute();
+ GnuAttributeAST *deprecatedAttr = deprecatedSpec->attribute_list->value->asGnuAttribute();
QVERIFY(deprecatedAttr);
QVERIFY(! deprecatedAttr->expression_list);
QCOMPARE(unit->spell(deprecatedAttr->identifier_token), "deprecated");
@@ -1399,13 +1399,13 @@ void tst_AST::objc_method_attributes_1()
QVERIFY(bar->attribute_list);
QVERIFY(bar->attribute_list->value);
QVERIFY(! (bar->attribute_list->next));
- AttributeSpecifierAST *unavailableSpec = bar->attribute_list->value->asAttributeSpecifier();
+ GnuAttributeSpecifierAST *unavailableSpec = bar->attribute_list->value->asGnuAttributeSpecifier();
QVERIFY(unavailableSpec);
QCOMPARE(unit->tokenKind(unavailableSpec->attribute_token), (int) T___ATTRIBUTE__);
QVERIFY(unavailableSpec->attribute_list);
QVERIFY(unavailableSpec->attribute_list->value);
QVERIFY(! (unavailableSpec->attribute_list->next));
- AttributeAST *unavailableAttr = unavailableSpec->attribute_list->value->asAttribute();
+ GnuAttributeAST *unavailableAttr = unavailableSpec->attribute_list->value->asGnuAttribute();
QVERIFY(unavailableAttr);
QVERIFY(! unavailableAttr->expression_list);
QCOMPARE(unit->spell(unavailableAttr->identifier_token), "unavailable");
diff --git a/tests/auto/cplusplus/cxx11/data/alignofAlignas.1.cpp b/tests/auto/cplusplus/cxx11/data/alignofAlignas.1.cpp
index 5ba43661ed..05768769f6 100644
--- a/tests/auto/cplusplus/cxx11/data/alignofAlignas.1.cpp
+++ b/tests/auto/cplusplus/cxx11/data/alignofAlignas.1.cpp
@@ -1,2 +1,8 @@
int i = alignof(int);
int t = alignof(C::foo) * 7 + alignof(Foo *);
+
+struct alignas(f()) Foo {};
+struct alignas(42) Foo {};
+struct alignas(double) Bar {};
+alignas(Foo) alignas(Bar) Foo *buffer;
+struct alignas(Mooze...) Gnarf {};
diff --git a/tests/auto/cplusplus/findusages/tst_findusages.cpp b/tests/auto/cplusplus/findusages/tst_findusages.cpp
index 2235034c31..97162be99a 100644
--- a/tests/auto/cplusplus/findusages/tst_findusages.cpp
+++ b/tests/auto/cplusplus/findusages/tst_findusages.cpp
@@ -115,6 +115,8 @@ private Q_SLOTS:
void usingInDifferentNamespace_QTCREATORBUG7978();
void unicodeIdentifier();
+
+ void inAlignas();
};
void tst_FindUsages::dump(const QList<Usage> &usages) const
@@ -984,5 +986,36 @@ void tst_FindUsages::unicodeIdentifier()
QCOMPARE(usages.at(1).len, 7);
}
+void tst_FindUsages::inAlignas()
+{
+ const QByteArray src = "\n"
+ "struct One {};\n"
+ "struct alignas(One) Two {};\n"
+ ;
+
+ Document::Ptr doc = Document::create("inAlignas");
+ doc->setUtf8Source(src);
+ doc->parse();
+ doc->check();
+
+ QVERIFY(doc->diagnosticMessages().isEmpty());
+ QCOMPARE(doc->globalSymbolCount(), 2U);
+
+ Snapshot snapshot;
+ snapshot.insert(doc);
+
+ Class *c = doc->globalSymbolAt(0)->asClass();
+ QVERIFY(c);
+ QCOMPARE(c->name()->identifier()->chars(), "One");
+
+ FindUsages find(src, doc, snapshot);
+ find(c);
+ QCOMPARE(find.usages().size(), 2);
+ QCOMPARE(find.usages()[0].line, 1);
+ QCOMPARE(find.usages()[0].col, 7);
+ QCOMPARE(find.usages()[1].line, 2);
+ QCOMPARE(find.usages()[1].col, 15);
+}
+
QTEST_APPLESS_MAIN(tst_FindUsages)
#include "tst_findusages.moc"
diff --git a/tests/tools/cplusplus-ast2png/dumpers.inc b/tests/tools/cplusplus-ast2png/dumpers.inc
index 5e901c386c..5e5bb1a10b 100644
--- a/tests/tools/cplusplus-ast2png/dumpers.inc
+++ b/tests/tools/cplusplus-ast2png/dumpers.inc
@@ -50,7 +50,21 @@ virtual bool visit(SimpleSpecifierAST *ast)
return false;
}
-virtual bool visit(AttributeSpecifierAST *ast)
+virtual bool visit(AlignmentSpecifierAST *ast)
+{
+ if (ast->align_token)
+ terminal(ast->align_token, ast);
+ if (ast->lparen_token)
+ terminal(ast->lparen_token, ast);
+ nonterminal(ast->typeIdExprOrAlignmentExpr);
+ if (ast->ellipses_token)
+ terminal(ast->ellipses_token, ast);
+ if (ast->rparen_token)
+ terminal(ast->rparen_token, ast);
+ return false;
+}
+
+virtual bool visit(GnuAttributeSpecifierAST *ast)
{
if (ast->attribute_token)
terminal(ast->attribute_token, ast);
@@ -58,7 +72,7 @@ virtual bool visit(AttributeSpecifierAST *ast)
terminal(ast->first_lparen_token, ast);
if (ast->second_lparen_token)
terminal(ast->second_lparen_token, ast);
- for (AttributeListAST *iter = ast->attribute_list; iter; iter = iter->next)
+ for (GnuAttributeListAST *iter = ast->attribute_list; iter; iter = iter->next)
nonterminal(iter->value);
if (ast->first_rparen_token)
terminal(ast->first_rparen_token, ast);
@@ -67,7 +81,7 @@ virtual bool visit(AttributeSpecifierAST *ast)
return false;
}
-virtual bool visit(AttributeAST *ast)
+virtual bool visit(GnuAttributeAST *ast)
{
if (ast->identifier_token)
terminal(ast->identifier_token, ast);