|
@@ -1137,7 +1137,7 @@ HLSLReservedKeyword:
|
|
case tok::kw_vec_step: // unary-expression: OpenCL 'vec_step' expression
|
|
case tok::kw_vec_step: // unary-expression: OpenCL 'vec_step' expression
|
|
// unary-expression: '__builtin_omp_required_simd_align' '(' type-name ')'
|
|
// unary-expression: '__builtin_omp_required_simd_align' '(' type-name ')'
|
|
case tok::kw___builtin_omp_required_simd_align:
|
|
case tok::kw___builtin_omp_required_simd_align:
|
|
- if (getLangOpts().HLSL) { goto HLSLReservedKeyword; } // HLSL Change - not supported
|
|
|
|
|
|
+ if (getLangOpts().HLSL && Tok.getKind() != tok::kw_sizeof) { goto HLSLReservedKeyword; } // HLSL Change - not supported
|
|
return ParseUnaryExprOrTypeTraitExpression();
|
|
return ParseUnaryExprOrTypeTraitExpression();
|
|
case tok::ampamp: { // unary-expression: '&&' identifier
|
|
case tok::ampamp: { // unary-expression: '&&' identifier
|
|
// HLSL Change Starts
|
|
// HLSL Change Starts
|
|
@@ -1809,7 +1809,10 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
|
|
bool &isCastExpr,
|
|
bool &isCastExpr,
|
|
ParsedType &CastTy,
|
|
ParsedType &CastTy,
|
|
SourceRange &CastRange) {
|
|
SourceRange &CastRange) {
|
|
- assert(!getLangOpts().HLSL && "not supported for HLSL - unreachable"); // HLSL Change
|
|
|
|
|
|
+ // HLSL Change Begin
|
|
|
|
+ assert((!getLangOpts().HLSL || OpTok.getKind() == tok::kw_sizeof)
|
|
|
|
+ && "not supported for HLSL - unreachable");
|
|
|
|
+ // HLSL Change End
|
|
|
|
|
|
assert(OpTok.isOneOf(tok::kw_typeof, tok::kw_sizeof, tok::kw___alignof,
|
|
assert(OpTok.isOneOf(tok::kw_typeof, tok::kw_sizeof, tok::kw___alignof,
|
|
tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step,
|
|
tok::kw_alignof, tok::kw__Alignof, tok::kw_vec_step,
|
|
@@ -1897,7 +1900,10 @@ Parser::ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
|
|
/// [C++11] 'alignof' '(' type-id ')'
|
|
/// [C++11] 'alignof' '(' type-id ')'
|
|
/// \endverbatim
|
|
/// \endverbatim
|
|
ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|
ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|
- assert(!getLangOpts().HLSL && "not supported for HLSL - unreachable"); // HLSL Change
|
|
|
|
|
|
+ // HLSL Change Begin
|
|
|
|
+ assert((!getLangOpts().HLSL || Tok.getKind() == tok::kw_sizeof)
|
|
|
|
+ && "not supported for HLSL - unreachable");
|
|
|
|
+ // HLSL Change End
|
|
assert(Tok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof,
|
|
assert(Tok.isOneOf(tok::kw_sizeof, tok::kw___alignof, tok::kw_alignof,
|
|
tok::kw__Alignof, tok::kw_vec_step,
|
|
tok::kw__Alignof, tok::kw_vec_step,
|
|
tok::kw___builtin_omp_required_simd_align) &&
|
|
tok::kw___builtin_omp_required_simd_align) &&
|
|
@@ -1906,7 +1912,7 @@ ExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {
|
|
ConsumeToken();
|
|
ConsumeToken();
|
|
|
|
|
|
// [C++11] 'sizeof' '...' '(' identifier ')'
|
|
// [C++11] 'sizeof' '...' '(' identifier ')'
|
|
- if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {
|
|
|
|
|
|
+ if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof) && !getLangOpts().HLSL) { // HLSL Change
|
|
SourceLocation EllipsisLoc = ConsumeToken();
|
|
SourceLocation EllipsisLoc = ConsumeToken();
|
|
SourceLocation LParenLoc, RParenLoc;
|
|
SourceLocation LParenLoc, RParenLoc;
|
|
IdentifierInfo *Name = nullptr;
|
|
IdentifierInfo *Name = nullptr;
|