summaryrefslogtreecommitdiffstats
path: root/clang/test/Parser/cxx-decl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-12-21 20:50:39 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-12-21 20:50:39 +0000
commitf391db52284c655a891c2c06787ea4e58ea7ef6a (patch)
tree8c531571d86af2d312b2c51c50990118c52d9634 /clang/test/Parser/cxx-decl.cpp
parent742ac98d013b77569645134441ffb05ff66052bd (diff)
downloadbcm5719-llvm-f391db52284c655a891c2c06787ea4e58ea7ef6a.tar.gz
bcm5719-llvm-f391db52284c655a891c2c06787ea4e58ea7ef6a.zip
Don't produce redundant parentheses warning for "A (::B);" and the like.
The parentheses here are not redundant as they affect the binding of the '::' token. llvm-svn: 321304
Diffstat (limited to 'clang/test/Parser/cxx-decl.cpp')
-rw-r--r--clang/test/Parser/cxx-decl.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/clang/test/Parser/cxx-decl.cpp b/clang/test/Parser/cxx-decl.cpp
index 8a7a3886053..711a874f6a2 100644
--- a/clang/test/Parser/cxx-decl.cpp
+++ b/clang/test/Parser/cxx-decl.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -pedantic-errors -fcxx-exceptions -fexceptions %s
-// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -pedantic-errors -fcxx-exceptions -fexceptions -std=c++98 %s
-// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -pedantic-errors -fcxx-exceptions -fexceptions -std=c++11 %s
+// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions %s
+// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions -std=c++98 %s
+// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions -std=c++11 %s
const char const *x10; // expected-error {{duplicate 'const' declaration specifier}}
@@ -83,7 +83,7 @@ namespace Commas {
int global1,
__attribute__(()) global2,
- (global5),
+ (global5), // expected-warning {{redundant parentheses surrounding declarator}}
*global6,
&global7 = global1,
&&global8 = static_cast<int&&>(global1),
@@ -263,6 +263,25 @@ namespace DuplicateFriend {
};
}
+namespace NNS {
+ struct A {};
+ namespace B { extern A C1, C2, *C3, C4[], C5; }
+ // Do not produce a redundant parentheses warning here; removing these parens
+ // changes the meaning of the program.
+ A (::NNS::B::C1);
+ A (NNS::B::C2); // expected-warning {{redundant parentheses surrounding declarator}}
+ A (*::NNS::B::C3); // expected-warning {{redundant parentheses surrounding declarator}}
+ A (::NNS::B::C4[2]);
+ // Removing one of these sets of parentheses would be reasonable.
+ A ((::NNS::B::C5)); // expected-warning {{redundant parentheses surrounding declarator}}
+
+ void f() {
+ // FIXME: A vexing-parse warning here would be useful.
+ A(::NNS::B::C1); // expected-error {{definition or redeclaration}}
+ A(NNS::B::C1); // expected-warning {{redundant paren}} expected-error {{definition or redeclaration}}
+ }
+}
+
// PR8380
extern "" // expected-error {{unknown linkage language}}
test6a { ;// expected-error {{C++ requires a type specifier for all declarations}}
OpenPOWER on IntegriCloud