<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/96515>96515</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missing Trait Compiler Error for Pointers in LLVM YAML API
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Nirhar
</td>
</tr>
</table>
<pre>
I have been trying to write a yaml parser using llvm's yaml API, but ran into an error. Here is the code that I'm attempting to compile:
```cpp
#include "llvm/Support/YAMLTraits.h"
#include "llvm/IR/Module.h"
using namespace llvm;
using llvm::yaml::MappingTraits;
using llvm::yaml::ScalarTraits;
using llvm::yaml::IO;
struct Foo {
unsigned x;
llvm::Value* v; // Lets assume that this would be constants only
};
// Yaml traits
template <>
struct yaml::ScalarTraits<llvm::Value*> {
static void output(const llvm::Value* &value, void*,
llvm::raw_ostream &out) {
value->print(out);
}
static StringRef input(StringRef scalar, void*, llvm::Value* &value) {
// Code that parses a string and converts it to llvm::Value*
return StringRef();
}
static QuotingType mustQuote(StringRef) { return QuotingType::None; }
};
template <>
struct yaml::MappingTraits<Foo> {
static void mapping(IO &io, Foo &f) {
io.mapRequired("x", f.x);
io.mapRequired("v", f.v);
}
};
int main() {
// Code to read-write from/to a yaml file.
return 0;
}
```
However, I get the following error when I try to compile it:
```
...include/llvm/Support/YAMLTraits.h:1172:42: error: invalid application of 'sizeof' to incomplete type 'llvm::yaml::MissingTrait<llvm::Value*>'
char missing_yaml_trait_for_type[sizeof(MissingTrait<T>)];
```
As far as I understand, this error would be generated if I fail to give a trait definition for llvm::Value*. But I've done so. So I'm confused as to why this error is generated. Any help would be appreciated!
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVt-P2jgQ_mvMy6gROEDgIQ8su6hIu22vW1Xq08okE-KTY-f8I5T760-2A4Rddq8Sikw8M_7mm5nPYcbwvUTMyeyOzO5HzNla6fwL1zXTo50qj_kWatYh7BAlWH3kcg9WwUFzi8DgyBoBLdMGNTjjN4XoGkIzE7dW37aErmHnLGgmgUurgElArZVO4DNqBG7A1giFKhFszSxsCc0aYNZi09r-vEI1LRdI0hUZ35PxiszH8Ve0bf-GplwWwpUIhNKIYvPs2lZpS-jm1-rp8Ydm3JqkJpR-4LP9TujmSZVO4NA0PGOKkjVoWlZgTDa9e2sSN1YkXXka4uqJtS2X-4ji7PW-_XPBBNN_bL79-gpJfBqrXWFhoxSQrN8HcDIUvoTfZycYRP3JhENCV9CR9A4I3RC6gUe0BpgxrukLZWtu4KCcKGHnCyiNZdIaUFIcewjZ_WtQMdYv3xw2phbe-2ILZhFIuibpwxX29yhZvwVM0odBmsYyywvoFC9BOds6S-gi4LyVK6HzLq7XwcWHo-s-1MVes8OLMlYja7yL8kGXQ24BQphPJH1oNZf-zGg0oNoT0y97kM9Wc7n_jhVwGYFe3piQ9jWujzN4BahnfX2esTCyBhiYcAgwWfoCdqitAW79yN0g9xxPo3VaXjATuvi__P5yyg_zj2OL0Dhj_X8cZtmDPsUe2EcUX5TE0I2n0G-b68-a6NUcrjdKXbfNVd800ZrQxfarJ5grT34YJzqvrpnmKmlY-x3_cVxjGUihv72E0DVAlfy-5ghu2ne9fZV0V-YfpM2lhYZxGaswTOSq7go0svJTlO5KKy92Xo6jUldcYHLy62swvhx0Pv0kvEMAn9UBOwwNuoU92iDolRJCHXxzBbWHQ40Stv4OGQg6cPtW0-PfJEl6cSZ087Gep6vJJKMkXU39I57nF1x2TPASWNsKXjDLlQRVgb-e-L-oKkIzj4VLj0agRbC-PQnNbuo3N-bUN--JD6HZubxFzTQ00enFh3kJgvdSKf3izyGzuxOMxavYP0KoJZkNSn2L-JWBimlgBrbgZInaK3Dp6xC0uSf-pNB7lKiZxRJ4BVuoGBc-_T3v_FUewEGJFZc8MFUpfUMEErhz8Y7uEEolEYxK4Fn113ahZOUMlh6T_06oj0Mo3FxAJLCSR6hRtBeErG01FtxvEzoZlXlaLtMlG2E-ySZLOs2mNB3VeZbhAlOWlhXOkU2WizJjWTlJ5ws2qdJlNeI5HdPpeE6nk_k0nabJfMlwVs3Gy2KSVvNdSqZjbBgXiU8wUXo_4sY4zJfz2WQ2EmyHwoSPIkolHiBs-sGc3Y907n0-7dzekOlYcGPNJYrlVmDeVxNCOWEdW13DQ-DA0_pNcWlRG-ASHh9_PoFvZ_-xNHJa5LW1rfGsh-ndc1u7XVKEee3nICBotfobCz8MAZ4hdBPhdzn9LwAA___iCwJi">