shivanshu3 updated this revision to Diff 308827. shivanshu3 added a comment.
Clang format the test file. Forgot to do it before. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91129/new/ https://reviews.llvm.org/D91129 Files: clang/lib/Parse/ParseExpr.cpp clang/test/Parser/sizeof-missing-parens.c Index: clang/test/Parser/sizeof-missing-parens.c =================================================================== --- /dev/null +++ clang/test/Parser/sizeof-missing-parens.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +void Foo(int); + +#define Bar(x) Foo(x) + +void Baz() { + Foo(sizeof int); // expected-error {{expected parentheses around type name in sizeof expression}} + Bar(sizeof int); // expected-error {{expected parentheses around type name in sizeof expression}} +} Index: clang/lib/Parse/ParseExpr.cpp =================================================================== --- clang/lib/Parse/ParseExpr.cpp +++ clang/lib/Parse/ParseExpr.cpp @@ -2264,12 +2264,20 @@ Declarator DeclaratorInfo(DS, DeclaratorContext::TypeName); ParseDeclarator(DeclaratorInfo); - SourceLocation LParenLoc = PP.getLocForEndOfToken(OpTok.getLocation()); - SourceLocation RParenLoc = PP.getLocForEndOfToken(PrevTokLocation); - Diag(LParenLoc, diag::err_expected_parentheses_around_typename) - << OpTok.getName() - << FixItHint::CreateInsertion(LParenLoc, "(") - << FixItHint::CreateInsertion(RParenLoc, ")"); + SourceLocation OpTokLoc = OpTok.getLocation(); + if (OpTokLoc.isMacroID()) { + SourceLocation OpTokExpansionLoc = + PP.getSourceManager().getFileLoc(OpTokLoc); + Diag(OpTokExpansionLoc, + diag::err_expected_parentheses_around_typename) + << OpTok.getName(); + } else { + SourceLocation LParenLoc = PP.getLocForEndOfToken(OpTokLoc); + SourceLocation RParenLoc = PP.getLocForEndOfToken(PrevTokLocation); + Diag(LParenLoc, diag::err_expected_parentheses_around_typename) + << OpTok.getName() << FixItHint::CreateInsertion(LParenLoc, "(") + << FixItHint::CreateInsertion(RParenLoc, ")"); + } isCastExpr = true; return ExprEmpty(); }
Index: clang/test/Parser/sizeof-missing-parens.c =================================================================== --- /dev/null +++ clang/test/Parser/sizeof-missing-parens.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +void Foo(int); + +#define Bar(x) Foo(x) + +void Baz() { + Foo(sizeof int); // expected-error {{expected parentheses around type name in sizeof expression}} + Bar(sizeof int); // expected-error {{expected parentheses around type name in sizeof expression}} +} Index: clang/lib/Parse/ParseExpr.cpp =================================================================== --- clang/lib/Parse/ParseExpr.cpp +++ clang/lib/Parse/ParseExpr.cpp @@ -2264,12 +2264,20 @@ Declarator DeclaratorInfo(DS, DeclaratorContext::TypeName); ParseDeclarator(DeclaratorInfo); - SourceLocation LParenLoc = PP.getLocForEndOfToken(OpTok.getLocation()); - SourceLocation RParenLoc = PP.getLocForEndOfToken(PrevTokLocation); - Diag(LParenLoc, diag::err_expected_parentheses_around_typename) - << OpTok.getName() - << FixItHint::CreateInsertion(LParenLoc, "(") - << FixItHint::CreateInsertion(RParenLoc, ")"); + SourceLocation OpTokLoc = OpTok.getLocation(); + if (OpTokLoc.isMacroID()) { + SourceLocation OpTokExpansionLoc = + PP.getSourceManager().getFileLoc(OpTokLoc); + Diag(OpTokExpansionLoc, + diag::err_expected_parentheses_around_typename) + << OpTok.getName(); + } else { + SourceLocation LParenLoc = PP.getLocForEndOfToken(OpTokLoc); + SourceLocation RParenLoc = PP.getLocForEndOfToken(PrevTokLocation); + Diag(LParenLoc, diag::err_expected_parentheses_around_typename) + << OpTok.getName() << FixItHint::CreateInsertion(LParenLoc, "(") + << FixItHint::CreateInsertion(RParenLoc, ")"); + } isCastExpr = true; return ExprEmpty(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits