From 89f3bcf0b526ebc0ebee949554c3f9b5bd199182 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 19 May 2017 22:37:01 +0000 Subject: [PATCH] Verifier: Check wchar_size module flag. Differential Revision: https://reviews.llvm.org/D32974 llvm-svn: 303460 --- llvm/lib/IR/Verifier.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp index 3b68d6365872..4b9bdcf81a39 100644 --- a/llvm/lib/IR/Verifier.cpp +++ b/llvm/lib/IR/Verifier.cpp @@ -1317,6 +1317,15 @@ Verifier::visitModuleFlag(const MDNode *Op, Assert(Inserted, "module flag identifiers must be unique (or of 'require' type)", ID); } + + if (ID->getString() == "wchar_size") { + ConstantInt *Value + = mdconst::dyn_extract_or_null(Op->getOperand(2)); + Assert(Value, "wchar_size metadata requires constant integer argument"); + uint64_t WCharSize = Value->getZExtValue(); + Assert(WCharSize == 0 || WCharSize == 2 || WCharSize == 4, + "wchar_size should be 0, 2 or 4"); + } } /// Return true if this attribute kind only applies to functions.