]> granicus.if.org Git - clang/commit
Correct 'target' default behavior on redecl, allow forward declaration.
authorErich Keane <erich.keane@intel.com>
Wed, 28 Nov 2018 20:58:43 +0000 (20:58 +0000)
committerErich Keane <erich.keane@intel.com>
Wed, 28 Nov 2018 20:58:43 +0000 (20:58 +0000)
commit517d5ea128541f868946990e21071ec00b31b3e1
treea9aa37874ad17019bc74115ecbdc15bbfd4f12b5
parent5c8a5adf223266707b1c8f8d1d32baf9ef3797db
Correct 'target' default behavior on redecl, allow forward declaration.

Declarations without the attribute were disallowed because it would be
ambiguous which 'target' it was supposed to be on.  For example:

void ___attribute__((target("v1"))) foo();
void foo(); // Redecl of above, or fwd decl of below?
void ___attribute__((target("v2"))) foo();

However, a first declaration doesn't have that problem, and erroring
prevents it from working in cases where the forward declaration is
useful.

Additionally, a forward declaration of target==default wouldn't properly
cause multiversioning, so this patch fixes that.

The patch was not split since the 'default' fix would require
implementing the same check for that case, followed by undoing the same
change for the fwd-decl implementation.

Change-Id: I66f2c5bc2477bcd3f7544b9c16c83ece257077b0

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@347805 91177308-0d34-0410-b5e6-96231b3b80d8
lib/AST/ASTContext.cpp
lib/CodeGen/CodeGenModule.cpp
lib/Sema/SemaDecl.cpp
test/CodeGen/attr-target-mv.c
test/Sema/attr-target-mv.c