diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp index ae9f39469a0671c7732d26cf3ae617a9e92e7be0..eefa3d5b9fe978bdcc6ecc7b4c1fcfcfa8c174e7 100644 --- a/shared/cplusplus/Parser.cpp +++ b/shared/cplusplus/Parser.cpp @@ -751,6 +751,9 @@ bool Parser::parseCvQualifiers(SpecifierAST *&node) spec->specifier_token = consumeToken(); *ast = spec; ast = &(*ast)->next; + } else if(LA() == T___ATTRIBUTE__) { + parseAttributeSpecifier(*ast); + ast = &(*ast)->next; } else { break; } diff --git a/tests/auto/cplusplus/ast/ast.pro b/tests/auto/cplusplus/ast/ast.pro index 6974c6bbb4c69f78c5816767bbcab9d083121ae2..39fd14105de2e394305c223f6e76f6047eb139e0 100644 --- a/tests/auto/cplusplus/ast/ast.pro +++ b/tests/auto/cplusplus/ast/ast.pro @@ -1,5 +1,4 @@ load(qttest_p4) include(../shared/shared.pri) QT = core - SOURCES += tst_ast.cpp diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp index 5756d2dd2245053c564ee73eea2f9dca11b70da0..689da076ea1c6045778d23da6ec97eb0dafefc4e 100644 --- a/tests/auto/cplusplus/ast/tst_ast.cpp +++ b/tests/auto/cplusplus/ast/tst_ast.cpp @@ -36,6 +36,9 @@ public: { return parse(source, TranslationUnit::ParseStatement); } private slots: + // declarations + void gcc_attributes_1(); + // expressions void simple_name(); void template_id(); @@ -54,6 +57,13 @@ private slots: void objc_protocol_definition_1(); }; +void tst_AST::gcc_attributes_1() +{ + QSharedPointer<TranslationUnit> unit(parseDeclaration("\n" +"static inline void *__attribute__((__always_inline__)) _mm_malloc(size_t size, size_t align);" + )); +} + void tst_AST::simple_name() { QSharedPointer<TranslationUnit> unit(parseExpression("a")); diff --git a/tests/manual/cplusplus/conf.c++ b/tests/manual/cplusplus/conf.c++ index fbfad57a4bc2157303aac6103ef7e15ca056e1d5..c179f979272ee673d3b78d5b8748271f73c0fc0e 100644 --- a/tests/manual/cplusplus/conf.c++ +++ b/tests/manual/cplusplus/conf.c++ @@ -5,3 +5,4 @@ #define __asm__(a...) #define restrict #define __restrict +#define __weak