diff options
author | Nate Begeman <natebegeman@mac.com> | 2009-06-26 06:32:41 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2009-06-26 06:32:41 +0000 |
commit | f27587001497315dacc24169ce5b7cd3d98ec51d (patch) | |
tree | 4155d239007be7ab604c3a3292b5118539cc08a0 /clang/lib/Parse/ParseDecl.cpp | |
parent | 6915bf6158865cf753ef5ea1997771ba4caa7480 (diff) | |
download | bcm5719-llvm-f27587001497315dacc24169ce5b7cd3d98ec51d.tar.gz bcm5719-llvm-f27587001497315dacc24169ce5b7cd3d98ec51d.zip |
OpenCL 1.0 support: attributes
llvm-svn: 74280
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 9a8e34211d0..c11383c3eca 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -149,13 +149,35 @@ AttributeList *Parser::ParseAttributes(SourceLocation *EndLoc) { } } } else { // not an identifier + switch (Tok.getKind()) { + case tok::r_paren: // parse a possibly empty comma separated list of expressions - if (Tok.is(tok::r_paren)) { // __attribute__(( nonnull() )) ConsumeParen(); // ignore the right paren loc for now CurrAttr = new AttributeList(AttrName, AttrNameLoc, 0, SourceLocation(), 0, 0, CurrAttr); - } else { + break; + case tok::kw_char: + case tok::kw_wchar_t: + case tok::kw_bool: + case tok::kw_short: + case tok::kw_int: + case tok::kw_long: + case tok::kw_signed: + case tok::kw_unsigned: + case tok::kw_float: + case tok::kw_double: + case tok::kw_void: + case tok::kw_typeof: + // If it's a builtin type name, eat it and expect a rparen + // __attribute__(( vec_type_hint(char) )) + ConsumeToken(); + CurrAttr = new AttributeList(AttrName, AttrNameLoc, + 0, SourceLocation(), 0, 0, CurrAttr); + if (Tok.is(tok::r_paren)) + ConsumeParen(); + break; + default: // __attribute__(( aligned(16) )) ExprVector ArgExprs(Actions); bool ArgExprsOk = true; @@ -181,6 +203,7 @@ AttributeList *Parser::ParseAttributes(SourceLocation *EndLoc) { SourceLocation(), ArgExprs.take(), ArgExprs.size(), CurrAttr); } + break; } } } else { |