diff options
author | Kaelyn Uhrain <rikka@google.com> | 2012-04-19 23:17:45 +0000 |
---|---|---|
committer | Kaelyn Uhrain <rikka@google.com> | 2012-04-19 23:17:45 +0000 |
commit | 434ed260eb28cacd1b87fc2429dfee66d61dfcf0 (patch) | |
tree | 09ddd4d4c0de232e620774c0b139138d761e2169 /test/FixIt/fixit.cpp | |
parent | 0c5d0a80528c7f0bc110dd7f72e5ba52d37155e0 (diff) |
In Parser::isCXXDeclarationSpecifier, consider a non-type identifier
followed by an identifier as declaration specificer (except for ObjC).
This allows e.g. an out-of-line C++ member function definitions to be
recognized as functions and not as variable declarations if the type
name for the first parameter is not recognized as a type--say, when there
is a function name shadowing an enum type name and the parameter is
missing the "enum" keyword needed to distinguish the two.
Note that returning TPResult::Error() instead of TPResult::True()
appears to have the same end result, while TPResult::Ambiguous()
results in a crash.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155163 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/FixIt/fixit.cpp')
-rw-r--r-- | test/FixIt/fixit.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/FixIt/fixit.cpp b/test/FixIt/fixit.cpp index 7d531a537a..afa71c6f3d 100644 --- a/test/FixIt/fixit.cpp +++ b/test/FixIt/fixit.cpp @@ -204,3 +204,15 @@ template<template<typename> Foo, // expected-error {{template template parameter template<typename> typename Bar, // expected-error {{template template parameter requires 'class' after the parameter list}} template<typename> struct Baz> // expected-error {{template template parameter requires 'class' after the parameter list}} void func(); + + +namespace ShadowedTagType { +class Foo { + public: + enum Bar { X, Y }; + void SetBar(Bar bar); + Bar Bar(); + private: + Bar bar_; // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}} +}; +void Foo::SetBar(Bar bar) { bar_ = bar; } // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}} |