summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-01-11 22:30:10 +0000
committerDouglas Gregor <dgregor@apple.com>2010-01-11 22:30:10 +0000
commitd615026e8dcdd77e81bbfeadcf2f9c2e87dfe8f2 (patch)
treedb930b1800f0517c003fa4928fbea138016dd009
parentb53e826103cf7adbde88aa4f9f3c0aa3c0f8293b (diff)
downloadbcm5719-llvm-d615026e8dcdd77e81bbfeadcf2f9c2e87dfe8f2.tar.gz
bcm5719-llvm-d615026e8dcdd77e81bbfeadcf2f9c2e87dfe8f2.zip
C++0x [dcl.typedef]p4, take 3, where we actually figure out what "that
is not also a typedef-name" actually means. For anyone keeping score, that's John: 2, Doug: 0. llvm-svn: 93196
-rw-r--r--clang/lib/Sema/SemaDecl.cpp2
-rw-r--r--clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp9
2 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index dc91431cdd7..d2f254c7184 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -832,7 +832,7 @@ void Sema::MergeTypeDefDecl(TypedefDecl *New, LookupResult &OldDecls) {
// };
//
// since that was the intent of DR56.
- if (isa<ElaboratedType>(New->getUnderlyingType()))
+ if (!isa<TypedefDecl >(Old))
return;
Diag(New->getLocation(), diag::err_redefinition)
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp
index 7fbd77cf597..c16ba201df7 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp
@@ -2,11 +2,14 @@
struct S {
typedef struct A {} A; // expected-note {{previous definition is here}}
- typedef struct B {} B;
+ typedef struct B B;
typedef A A; // expected-error {{redefinition of 'A'}}
- struct C { }; // expected-note{{previous definition is here}}
+ struct C { };
typedef struct C OtherC;
- typedef OtherC C; // expected-error{{redefinition of 'C'}}
+ typedef OtherC C;
+
+ typedef struct D { } D2;
+ typedef D2 D;
};
OpenPOWER on IntegriCloud