Export ForEach on non-root functions.
BUG=6000538
This change also updates expected diagnostics for our existing tests.
Change-Id: I98e12625d121ae20fcb6dcaacf0852c0f239c604
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index 1c03fc9..20b9395 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2010, The Android Open Source Project
+ * Copyright 2010-2012, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -57,7 +57,8 @@
mAllowRSPrefix(AllowRSPrefix),
mExportVarMetadata(NULL),
mExportFuncMetadata(NULL),
- mExportForEachMetadata(NULL),
+ mExportForEachNameMetadata(NULL),
+ mExportForEachSignatureMetadata(NULL),
mExportTypeMetadata(NULL),
mRSObjectSlotsMetadata(NULL),
mRefCount(mContext->getASTContext()) {
@@ -403,10 +404,16 @@
// Dump export function info
if (mContext->hasExportForEach()) {
- if (mExportForEachMetadata == NULL)
- mExportForEachMetadata =
+ if (mExportForEachNameMetadata == NULL) {
+ mExportForEachNameMetadata =
+ M->getOrInsertNamedMetadata(RS_EXPORT_FOREACH_NAME_MN);
+ }
+ if (mExportForEachSignatureMetadata == NULL) {
+ mExportForEachSignatureMetadata =
M->getOrInsertNamedMetadata(RS_EXPORT_FOREACH_MN);
+ }
+ llvm::SmallVector<llvm::Value*, 1> ExportForEachName;
llvm::SmallVector<llvm::Value*, 1> ExportForEachInfo;
for (RSContext::const_export_foreach_iterator
@@ -416,11 +423,18 @@
I++) {
const RSExportForEach *EFE = *I;
+ ExportForEachName.push_back(
+ llvm::MDString::get(mLLVMContext, EFE->getName().c_str()));
+
+ mExportForEachNameMetadata->addOperand(
+ llvm::MDNode::get(mLLVMContext, ExportForEachName));
+ ExportForEachName.clear();
+
ExportForEachInfo.push_back(
llvm::MDString::get(mLLVMContext,
- llvm::utostr_32(EFE->getMetadataEncoding())));
+ llvm::utostr_32(EFE->getSignatureMetadata())));
- mExportForEachMetadata->addOperand(
+ mExportForEachSignatureMetadata->addOperand(
llvm::MDNode::get(mLLVMContext, ExportForEachInfo));
ExportForEachInfo.clear();
}