diff options
author | Erich Keane <erich.keane@intel.com> | 2018-02-20 18:44:50 +0000 |
---|---|---|
committer | Erich Keane <erich.keane@intel.com> | 2018-02-20 18:44:50 +0000 |
commit | 5e5baf59ddc9aecef000350f3207bb686509af01 (patch) | |
tree | e5d7e4a676b0e6c7dc24359725916445175c161f | |
parent | 2cf3769a7e7fa5aba6a43f3a91f121d6d447762b (diff) | |
download | bcm5719-llvm-5e5baf59ddc9aecef000350f3207bb686509af01.tar.gz bcm5719-llvm-5e5baf59ddc9aecef000350f3207bb686509af01.zip |
Correct multiversion unsupported target behavior, add a test.
Multiversioning SEMA failed to set the declaration as invalid on unsupported
targets. This patch does that.
Additionally, I noticed that there is no test to validate this error message.
This patch adds one, and uses 'mips' as the test architecture.
llvm-svn: 325610
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 2 | ||||
-rw-r--r-- | clang/test/Sema/attr-target-unsupported.c | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 7d7b274b815..ab50b43db24 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -9365,6 +9365,7 @@ static bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, } if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) { S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported); + NewFD->setInvalidDecl(); return true; } @@ -9407,6 +9408,7 @@ static bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) { S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported); S.Diag(OldFD->getLocation(), diag::note_previous_declaration); + NewFD->setInvalidDecl(); return true; } diff --git a/clang/test/Sema/attr-target-unsupported.c b/clang/test/Sema/attr-target-unsupported.c new file mode 100644 index 00000000000..8e23fcc17eb --- /dev/null +++ b/clang/test/Sema/attr-target-unsupported.c @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple mips-linux-gnu -fsyntax-only -verify %s + +void __attribute__((target("arch=mips1"))) +foo(void) {} +// expected-error@+3 {{function multiversioning is not supported on the current target}} +// expected-note@-2 {{previous declaration is here}} +void __attribute__((target("arch=mips2"))) +foo(void) {} + +// expected-error@+2 {{function multiversioning is not supported on the current target}} +void __attribute__((target("default"))) +bar(void){} |