diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 2fae627ea6ac..e06761f1ba83 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -353,7 +353,9 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, } bool isFunc = D.isFunctionDeclarator(); - if (!isFunc && D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_typedef) { + if (!isFunc && + D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_typedef && + D.getNumTypeObjects() == 0) { // Check also for this case: // // typedef int f(); diff --git a/clang/test/SemaCXX/class.cpp b/clang/test/SemaCXX/class.cpp index 71ad7de91436..c3886f3922ed 100644 --- a/clang/test/SemaCXX/class.cpp +++ b/clang/test/SemaCXX/class.cpp @@ -26,6 +26,7 @@ public: typedef int func(); func tm; + func *ptm; func btm : 1; // expected-error {{error: bit-field 'btm' with non-integral type}} NestedC bc : 1; // expected-error {{error: bit-field 'bc' with non-integral type}}