mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-02 09:36:08 +00:00

Summary: Conflicting types for the same section name defined in clang section pragmas and GNU-style section attributes were not properly captured by Clang's Sema. The lack of diagnostics was caused by the fact the section specification coming from attributes was handled by Sema as implicit, even though explicitly defined by the user. This patch enables the diagnostics for section type conflicts between those specifications by making sure sections defined in section attributes are correctly handled as explicit. Reviewers: hans, rnk, javed.absar Reviewed By: rnk Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78573
32 lines
2.9 KiB
C
32 lines
2.9 KiB
C
// RUN: %clang_cc1 -fsyntax-only -verify %s -triple arm-none-eabi
|
|
#pragma clang section bss = "mybss.1" data = "mydata.1" rodata = "myrodata.1" text = "mytext.1" // expected-note 2 {{#pragma entered here}}
|
|
#pragma clang section bss="" data="" rodata="" text=""
|
|
#pragma clang section
|
|
|
|
#pragma clang section dss="mybss.2" // expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
#pragma clang section deta="mydata.2" // expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
#pragma clang section rodeta="rodata.2" // expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
#pragma clang section taxt="text.2" // expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
|
|
#pragma clang section section bss="mybss.2" // expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
|
|
#pragma clang section bss "mybss.2" // expected-error {{expected '=' following '#pragma clang section bss'}}
|
|
#pragma clang section data "mydata.2" // expected-error {{expected '=' following '#pragma clang section data'}}
|
|
#pragma clang section rodata "myrodata.2" // expected-error {{expected '=' following '#pragma clang section rodata'}}
|
|
#pragma clang section text "text.2" // expected-error {{expected '=' following '#pragma clang section text'}}
|
|
#pragma clang section relro "relro.2" // expected-error {{expected '=' following '#pragma clang section relro'}}
|
|
#pragma clang section bss="" data="" rodata="" text="" more //expected-error {{expected one of [bss|data|rodata|text|relro] section kind in '#pragma clang section'}}
|
|
|
|
#pragma clang section bss = "mybss.3" data = "mybss.3" // expected-error {{this causes a section type conflict with a prior #pragma section}} expected-note {{#pragma entered here}} expected-note {{#pragma entered here}}
|
|
#pragma clang section rodata = "mydata.1" // expected-error {{this causes a section type conflict with a prior #pragma section}}
|
|
#pragma clang section bss = "myrodata.1" // expected-error {{this causes a section type conflict with a prior #pragma section}}
|
|
#pragma clang section text = "mybss.3" // expected-error {{this causes a section type conflict with a prior #pragma section}}
|
|
|
|
#pragma clang section rodata = "myrodata.4" // expected-note {{#pragma entered here}}
|
|
int x __attribute__((section("myrodata.4"))); // expected-error {{'x' causes a section type conflict with a prior #pragma section}}
|
|
const int y __attribute__((section("myrodata.5"))) = 10; // expected-note {{declared here}}
|
|
#pragma clang section data = "myrodata.5" // expected-error {{this causes a section type conflict with 'y'}}
|
|
const int z __attribute__((section("myrodata.6"))) = 11;
|
|
|
|
int a;
|