diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 2 | ||||
| -rw-r--r-- | clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p4.cpp | 9 |
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; }; |

