Revert "parser: wordsmith diagnostic message" and "parser: diagnose empty attribute blocks"

This reverts commit r239846 and r239879.  They caused clang's
-fms-extensions behavior to incorrectly parse lambdas and includes a
testcase to ensure we don't regress again.

This issue was found in PR24027.

llvm-svn: 241668
This commit is contained in:
David Majnemer 2015-07-08 05:55:00 +00:00
parent cefbc7cfcb
commit e4752e753f
4 changed files with 8 additions and 9 deletions

View File

@ -1004,10 +1004,6 @@ def err_pragma_invalid_keyword : Error<
def warn_pragma_unroll_cuda_value_in_parens : Warning<
"argument to '#pragma unroll' should not be in parentheses in CUDA C/C++">,
InGroup<CudaCompat>;
def err_empty_attribute_block : Error<
"Microsoft attribute block cannot be empty">;
} // end of Parse Issue category.
let CategoryName = "Modules Issue" in {

View File

@ -3814,7 +3814,7 @@ SourceLocation Parser::SkipCXX11Attributes() {
return EndLoc;
}
/// Parse one or more Microsoft-style attributes [Attr]
/// ParseMicrosoftAttributes - Parse Microsoft attributes [Attr]
///
/// [MS] ms-attribute:
/// '[' token-seq ']'
@ -3830,8 +3830,6 @@ void Parser::ParseMicrosoftAttributes(ParsedAttributes &attrs,
// FIXME: If this is actually a C++11 attribute, parse it as one.
BalancedDelimiterTracker T(*this, tok::l_square);
T.consumeOpen();
if (Tok.is(tok::r_square))
Diag(T.getOpenLocation(), diag::err_empty_attribute_block);
SkipUntil(tok::r_square, StopAtSemi | StopBeforeMatch);
T.consumeClose();
if (endLoc)

View File

@ -55,8 +55,6 @@ int foo1([SA_Post(attr=1)] void *param);
[unbalanced(attribute) /* expected-note {{to match this '['}} */
void f(void); /* expected-error {{expected ']'}} */
[] __interface I {}; /* expected-error {{Microsoft attribute block cannot be empty}} */
void ms_intrinsics(int a) {
__noop();
__assume(a);

View File

@ -400,3 +400,10 @@ static_assert(__alignof(struct align_before_key1) == 16, "");
static_assert(__alignof(struct align_before_key2) == 16, "");
static_assert(__alignof(struct align_before_key3) == 16, "");
}
namespace PR24027 {
struct S {
template <typename T>
S(T);
} f([] {});
}