Author: erichkeane Date: Tue Jan 15 09:51:09 2019 New Revision: 351212 URL: http://llvm.org/viewvc/llvm-project?rev=351212&view=rev Log: Fix cpu-dispatch MV regression caused by r347812
r347812 permitted forward declarations for cpu-dispatch functions, which are occassionally useful as exposition in header files. However, this inadvertently permitted this function to become multiversioned after a usage. This patch ensures that the "CausesMV" checks are still run in the forward-declaration case. Change-Id: Icb6f975a2d068f088b89e3bbe26cf1d24f5a972c Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/Sema/attr-cpuspecific.c Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=351212&r1=351211&r2=351212&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Jan 15 09:51:09 2019 @@ -9816,7 +9816,8 @@ static bool CheckMultiVersionAdditionalD return true; } - if (CheckMultiVersionAdditionalRules(S, OldFD, NewFD, false, NewMVType)) { + if (CheckMultiVersionAdditionalRules(S, OldFD, NewFD, + !OldFD->isMultiVersion(), NewMVType)) { NewFD->setInvalidDecl(); return true; } Modified: cfe/trunk/test/Sema/attr-cpuspecific.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-cpuspecific.c?rev=351212&r1=351211&r2=351212&view=diff ============================================================================== --- cfe/trunk/test/Sema/attr-cpuspecific.c (original) +++ cfe/trunk/test/Sema/attr-cpuspecific.c Tue Jan 15 09:51:09 2019 @@ -40,6 +40,14 @@ int __attribute__((cpu_dispatch(atom))) int allow_fwd_decl(void); int __attribute__((cpu_dispatch(atom))) allow_fwd_decl(void) {} +int allow_fwd_decl2(void); +void use_fwd_decl(void) { + allow_fwd_decl2(); +} +// expected-error@+1 {{function declaration cannot become a multiversioned function after first usage}} +int __attribute__((cpu_dispatch(atom))) allow_fwd_decl2(void) {} + + int __attribute__((cpu_specific(atom))) redecl4(void); // expected-error@+1 {{function declaration is missing 'cpu_specific' or 'cpu_dispatch' attribute in a multiversioned function}} int redecl4(void); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits