Comments (4)
(btw, I found another warning when use yyjson_inline_api as yyjson_api:
yyjson.c|6296 col 37| warning: pointer 'val_hdr' may be used after 'realloc' [-Wuse-after-free]
|| 6296 | val = val_tmp + (usize)(val - val_hdr); \
|| | ^
yyjson.c|6358 col 5| note: in expansion of macro 'val_incr'
|| 6358 | val_incr();
|| | ^~~~~~~~
|| In function 'default_realloc',
)
from yyjson.
The first warning happens because the definition of yyjson_api
is changed.
The original code is like this, and it's fine:
extern void foo(void);
static inline void bar(void) {
foo();
}
But when you #define yyjson_api static
, it changes extern
to static
, causing a warning:
static void foo(void);
static inline void bar(void) {
foo();
}
The second warning comes from including yyjson.c
directly.
In yyjson.c, alc.realloc()
is used to call realloc indirectly through a function pointer. Normally, yyjson.c is compiled separately, so there's no warning.
But if you compile yyjson.c with your code in one unit and don't use a custom allocator, GCC will perform constant propagation and inline alc.realloc() to libc's realloc(), which causes the warning.
Could you share more about why you're using the library this way?
from yyjson.
I'm just trying to make a single DLL module on windows for Lua, in this way unused functions are stripped from the result binary, and all routes are inlined for better performance and binary size.
The first warning also makes link failure for missing symbols.
It seems that what I needed is something like yyjson_static_api.
The binding code is here:
https://github.com/starwing/luabuild/blob/master/src/lyyjson.c
(Notice that all sources including Lua are amalgamated into one translation unit in one.c)
from yyjson.
Fixed.
from yyjson.
Related Issues (20)
- A character make fail the JSON (empty JSON) HOT 1
- Does yyjson have parameters to set decimal places? HOT 5
- Discussion / Feedback request: Incorporating bytearray type HOT 8
- incorrectly formatted bool fields. HOT 3
- I need to merge multiple JSON strings HOT 1
- Is there a method to store the array of primitive types? HOT 4
- Release life cycle HOT 3
- Remove static qualifiers to support wrapping in other languages HOT 7
- Report row and line number when generating errors, instead of an absolute position HOT 10
- Improve error messages HOT 1
- write array obj not correctly HOT 2
- Condition for calling read_number_raw HOT 3
- yyjson library can not get value that I try to parse. HOT 1
- Diff two objects to create a patch HOT 2
- New release? HOT 1
- Meson build system support HOT 1
- [BUG] Prettify JSON has wrong space when prettifying an array of number HOT 2
- Ability to output empty objects as null instead of {} HOT 1
- Tested against "Parsing JSON is a Minefield" test suite? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yyjson.