Fix ms-layout_version declspec test and add missing new test
Now that MSVC compatibility versions are stored as a four digit number
(1912) instead of a two digit number (19), we need to adjust how we
handle this attribute.
Also add a new test that was intended to be part of r349414.
llvm-svn: 349415
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 3e0fa53..829bc9a 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5694,18 +5694,18 @@
if (!checkUInt32Argument(S, AL, AL.getArgAsExpr(0), Version))
return;
- // The attribute expects a "major" version number like 19, but new versions of
- // MSVC have moved to updating the "minor", or less significant numbers, so we
- // have to multiply by 100 now.
- Version *= 100;
-
// TODO: Investigate what happens with the next major version of MSVC.
- if (Version != LangOptions::MSVC2015) {
+ if (Version != LangOptions::MSVC2015 / 100) {
S.Diag(AL.getLoc(), diag::err_attribute_argument_out_of_bounds)
<< AL << Version << VersionExpr->getSourceRange();
return;
}
+ // The attribute expects a "major" version number like 19, but new versions of
+ // MSVC have moved to updating the "minor", or less significant numbers, so we
+ // have to multiply by 100 now.
+ Version *= 100;
+
D->addAttr(::new (S.Context)
LayoutVersionAttr(AL.getRange(), S.Context, Version,
AL.getAttributeSpellingListIndex()));