зеркало из https://github.com/microsoft/clang.git
Parse "sizeof(arr)[0]" as a sizeof of an expr if arr
is an expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44065 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
66d6b294af
Коммит
4c1a2a97b2
|
@ -748,11 +748,15 @@ Parser::ExprResult Parser::ParseSizeofAlignofExpression() {
|
|||
|
||||
// If ParseParenExpression parsed a '(typename)' sequence only, the this is
|
||||
// sizeof/alignof a type. Otherwise, it is sizeof/alignof an expression.
|
||||
if (ExprType == CastExpr) {
|
||||
if (ExprType == CastExpr)
|
||||
return Actions.ActOnSizeOfAlignOfTypeExpr(OpTok.getLocation(),
|
||||
OpTok.is(tok::kw_sizeof),
|
||||
LParenLoc, CastTy, RParenLoc);
|
||||
}
|
||||
|
||||
// If this is a parenthesized expression, it is the start of a
|
||||
// unary-expression, but doesn't include any postfix pieces. Parse these
|
||||
// now if present.
|
||||
Operand = ParsePostfixExpressionSuffix(Operand);
|
||||
}
|
||||
|
||||
// If we get here, the operand to the sizeof/alignof was an expresion.
|
||||
|
|
|
@ -28,3 +28,12 @@ int test_offsetof() {
|
|||
// FIXME: change into something that is semantically correct.
|
||||
__builtin_offsetof(int, a.b.c[4][5]);
|
||||
}
|
||||
|
||||
void test_sizeof(){
|
||||
int arr[10];
|
||||
sizeof arr[0];
|
||||
sizeof(arr[0]);
|
||||
sizeof(arr)[0];
|
||||
}
|
||||
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче