forked from qt-creator/qt-creator
C++: Support alignas in C++11 mode.
Change-Id: Ifa81a481bf92b5b71495a105ae292f3e9895f704 Task-number: QTCREATORBUG-9279 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
committed by
Nikolai Kosjar
parent
d2db54b451
commit
45b1169d06
@@ -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");
|
||||
|
||||
@@ -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 {};
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user