Make "#pragma clang attribute" support uninitialized attribute.
authorJian Cai <caij2003@gmail.com>
Thu, 23 Apr 2020 19:11:50 +0000 (12:11 -0700)
committerJian Cai <caij2003@gmail.com>
Thu, 23 Apr 2020 21:25:13 +0000 (14:25 -0700)
commitfcbc613ad8b7785f710996f58726f26ad4ace50b
treeac8135aa6e1a513d96d390bd6270d16b2883e97c
parent9721fbf85b83c1cb67cea542c5558f99a07766cf
Make "#pragma clang attribute" support uninitialized attribute.

Summary:
When using -ftrivial-auto-var-init=* options to initiate automatic
variables in a file, to disable initialization on some variables,
currently we have to manually annotate the variables with uninitialized
attribute, such as

int dont_initialize_me __attribute((uninitialized));

Making pragma clang attribute to support this attribute would make
annotating variables much easier, and could be particular useful for
bisection efforts, e.g.

void use(void*);

void buggy() {
    int arr[256];
    int boom;
    float bam;
    struct { int oops; } oops;
    union { int oof; float aaaaa; } oof;

    use(&arr);
    use(&boom);
    use(&bam);
    use(&oops);
    use(&oof);
}

Reviewers: jfb, rjmccall, aaron.ballman

Reviewed By: jfb, aaron.ballman

Subscribers: aaron.ballman, george.burgess.iv, dexonsmith, MaskRay, phosek, hubert.reinterpretcast, gbiv, manojgupta, llozano, srhines, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D78693
clang/docs/LanguageExtensions.rst
clang/include/clang/Basic/Attr.td
clang/test/CodeGenCXX/trivial-auto-var-init-attribute.cpp
clang/test/Misc/pragma-attribute-supported-attributes-list.test
clang/test/Parser/pragma-attribute.cpp